Java-XML解析 - 日理万妓 2023-10-18 23:39 58阅读 0赞 我的网站:[欢迎大家访问][Link 1] ![aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA4LzA5L2ViSXlIZS5wbmc][] ## XML ## ### 概念 ### 可扩展的标记语言 和HTML类似 版本1.0 作为通用的数据交换格式 1.通常用来作为配置文件(框架的配置文件都会使用XML) 2.与平台无关,可作为数据交换的一个过渡 3.文档清晰,方便管理数据(properties 键值对存在,XML 文档存在,相当于一个树形结构) ### 语法 ### 单标签 只有一个 双标签 有开始有结尾 标签名字 < <符号 > >符号 对于要转义的地方<!\[CDATA\[内容\]\]> ### 注意事项 ### 1.一个XML只能有一个根节点 2.正确嵌套,层级分明 3.严格区分大小写 4.标签名自定义 5.特殊字符需要进行转义 ### XML约束 ### 1.主要约束XML中能够使用哪些标签 2.哪些标签是必须的 3.标签的顺序是怎样的 4.可以给一些智能提示 两种约束:dtd(功能稍微简单) Schema(功能强大,本身也是一个XML) ### XML解析 ### #### Dom原生解析 #### package com.ifueen.classtest.protogenesisdom; import static org.junit.Assert.*; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XMLTestDemo { Document document = null; File file = new File("resources/test.xml"); @Before public void test() throws Exception { // 获取DocumentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 获取 DocumentBuilder documentBuilder = factory.newDocumentBuilder(); document = documentBuilder.parse(file); // System.out.println(document); } /** * 增加 */ @Test public void insert() { NodeList list = document.getElementsByTagName("name"); Element item = (Element) list.item(1); Element element = document.createElement("sun"); element.setTextContent("你想看我吗"); item.appendChild(element); } /** * 删除 */ @Test public void delete() { NodeList list = document.getElementsByTagName("age"); Element item = (Element) list.item(0); Node node = item.getParentNode(); node.removeChild(item); } /** * 修改 */ @Test public void update() { NodeList list = document.getElementsByTagName("speak"); Element item = (Element) list.item(0); item.setTextContent("别开枪,这里没有反抗的人"); } /** * @throws Exception * 刷新 */ @After public void flush() throws Exception { // 回写工厂 TransformerFactory instance = TransformerFactory.newInstance(); Transformer transformer = instance.newTransformer(); //读内存中的数据 DOMSource source = new DOMSource(document); //设置需要写入的文件 StreamResult result = new StreamResult(file); transformer.transform(source, result); System.out.println("写入完成"); } /** * 查询 */ @Test public void select() { NodeList list = document.getElementsByTagName("name"); for (int i = 0; i < list.getLength(); i++) { Element item = (Element) list.item(i); System.out.println(item.getTextContent()); } } } #### DOM4J #### package com.ifueen.classtest.dom4j; import java.io.File; import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author admin 这是DOM4J的方式解析xml * */ public class DOM4JTest { Document document; File file = new File("resources/test.xml"); Element root; @Before public void test() throws Exception { // 获取SAXReader对象 SAXReader saxReader = new SAXReader(); // 将文件转换为dom对象 document = saxReader.read(file); root = document.getRootElement(); } /** * 增加 */ @Test public void inster() { /* * List list = root.elements("student"); Element element = (Element) * list.get(0); System.out.println(element); * element.addElement("speak").setText("不要说话"); */ } /** * 删除 */ @Test public void delete() { Element element = (Element) root.elements("student").get(0); element.getParent().remove(element); } /** * 修改 */ @Test public void update() { Element element = (Element) root.elements("student").get(1); element.setText("落日飞车"); } @After public void flush() throws Exception { OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter(file), format); writer.write(document); // 关闭 writer.close(); } /** * 查询 需要先拿到父节点再拿到子节点 */ @Test public void select() { /* * List list = root.elements("student"); for (Object object : list) { * //强转 Element ele =(Element)object; System.out.println(ele.getName()); * //获取student节点上面的name节点 List list2 = ele.elements("name"); for (int i * = 0; i < list2.size(); i++) { Element ele1 = (Element) list2.get(i); * System.out.println(ele1.getText()); } } */ } } #### XPATH #### 利用XPATH的方式获取到相应的属性 /** * 利用Xpath获取 */ @Test public void xpathTest() { Node node = document.selectSingleNode("/psrson/student"); System.out.println(node.getText()); } 然后就可以进行相应的操作 [Link 1]: https://www.ifueen.com [aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA4LzA5L2ViSXlIZS5wbmc]: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA4LzA5L2ViSXlIZS5wbmc
还没有评论,来说两句吧...