xml总结
- 游戏开发
- 2025-08-02 19:06:01

xml 1 概述
xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制。
它允许用户自定义标签。一个标签用于描述一段数据;一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述其他数据,以此来实现数据关系的描述。
2 语法 2.1 组成一个XML文件分为如下几部分内容: 1.文档声明 2.元素 3.属性 4.注释 5.CDATA区、特殊字符 6.处理指令(processing instruction)
2.2 文档声明 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>version –文档符合XML1.0规范,我们学习1.0 encoding –文档字符编码,比如”GB2312”或者”UTF-8” standalone –文档定义是否独立使用 standalone=”no”为默认值。yes代表是独立使用,而no代表不是独立使用
2.3 元素每个XML文档必须有且只有一个根元素
写法:
<!--包含内容--> <a></a> <!--不包含内容--> <a/> <!--下面两个元素意义不同--> <stu>xiaoming</stu> <stu> xiaoming </stu>命名规范:
区分大小写;不能以数字或下划线”_”开头;元素内不能包含空格;称中间不能包含冒号(:)。实体字符
实体字符代替<<>>&&'’""CDATA
CDATA节中可以输入任意字符(除]]>外),但是不能嵌套!。
<stu id="001"> <name>杨过</name> <sex>男</sex> <age>20</age> <intro><![CDATA[ad<<&$^#*k]]></intro> </stu> dom4j 1 概述DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
2 使用读取XML文档
@Test @SneakyThrows void test1(){ SAXReader saxReader = new SAXReader(); // 读取xml // 注意:有多种方式读取 Document document = saxReader.read("http://localhost:8080/1600914750685.xml"); document = saxReader.read("e:/test/test.xml"); // 获得xml字符串 String asXML = document.asXML(); System.out.println(asXML); // 获得根节点 Element rootElement = document.getRootElement(); // 新增节点及其数据 Element menuElement = rootElement.addElement("menu"); Element endNameElement = menuElement.addElement("endName"); endNameElement.setText("make"); }document相关
@Test @SneakyThrows void testx(){ SAXReader saxReader = new SAXReader(); // 读取xml // 注意:有多种方式读取 // Document document = saxReader.read("http://localhost:8080/1600914750685.xml"); Document document = saxReader.read("e:/test/test.xml"); // 创建对象 document = DocumentHelper.createDocument(); // 解析文本获得对象 document = DocumentHelper.parseText("<a>hehe</a>"); }写入xml
@Test @SneakyThrows void test2(){ SAXReader saxReader = new SAXReader(); Document document = saxReader.read("e:/test/test.xml"); FileOutputStream fo = new FileOutputStream("e:/test/test2.xml"); OutputStreamWriter ow = new OutputStreamWriter(fo, "gbk"); // 设置输出格式 OutputFormat outputFormat = new OutputFormat(); outputFormat.setEncoding("gbk"); XMLWriter xmlWriter = new XMLWriter(ow,outputFormat); xmlWriter.write(document); xmlWriter.close(); }创建xml
@Test @SneakyThrows void test3(){ // 创建对象 Document document = DocumentHelper.createDocument(); Element rootElement = document.addElement("books"); // 建立跟节点 rootElement.addComment("测试,这是跟"); // 增加注释 Element book = rootElement.addElement("book"); // 增加子节点 book.addAttribute("show","true"); // 增加属性 book.setText("三国演义"); // 增加文本内容 XMLWriter xmlWriter = new XMLWriter(new FileWriter(new File("e:/test/test3.xml"))); xmlWriter.write(document); xmlWriter.close(); }属性操作
@Test @SneakyThrows void testx(){ SAXReader saxReader = new SAXReader(); Document document = saxReader.read("e:/test/test.xml"); Element rootElement = document.getRootElement(); // 取得节点的属性 Attribute attribute = rootElement.attribute("TradeCode"); // 取得节点的属性值 String tradeCode = rootElement.attributeValue("TradeCode"); // 取得节点的所有属性 Iterator<Attribute> attributeIterator = rootElement.attributeIterator(); // 增加属性 rootElement.addAttribute("id","222"); // 删除属性 rootElement.remove(attribute); // 修改属性 List<Node> aNodeList = rootElement.selectNodes("CallNo/@id"); for (Iterator<Node> it = aNodeList.iterator();((Iterator) it).hasNext();){ Node node = it.next(); node.setText("se"); } }节点操作
@Test @SneakyThrows void test1(){ SAXReader saxReader = new SAXReader(); Document document = saxReader.read("e:/test/test.xml"); // 获得xml字符串 String asXML = document.asXML(); System.out.println(asXML); // 获得根节点 Element rootElement = document.getRootElement(); // 新增节点及其数据 Element menuElement = rootElement.addElement("menu"); Element endNameElement = menuElement.addElement("endName"); endNameElement.setText("make"); // 迭代遍历所有节点 Iterator<Element> elementIterator = rootElement.elementIterator(); while (elementIterator.hasNext()){ Element element = elementIterator.next(); System.out.println(element.asXML()); } // 修改节点内容 List<Node> nodeList = rootElement.selectNodes("menu/book"); Iterator<Node> iterator = nodeList.iterator(); while (iterator.hasNext()) { Node node = iterator.next(); node.setText("三国"); } // 删除节点 List<Node> nodes = rootElement.selectNodes("menu"); Iterator<Node> iterator1 = nodes.iterator(); while (iterator1.hasNext()) { Element element = (Element) iterator1.next(); rootElement.remove(element); } // 取得单个节点 Element callNoElement = rootElement.element("CallNo"); rootElement.getText(); // 取得该节点下的文字 String name = rootElement.elementText("CallNo"); // 取得下级节点CallNo的文字 // 在该节点下添加CDATA内容 rootElement.addCDATA("dsfnmfsdgfvosijfas"); } 3 xpathXPath 使用路径表达式在 XML 文档中选取节点,节点是沿着路径或者 step 来选取的。
基本
路径表达式结果bookstore选取 bookstore 元素的所有子节点/bookstore选取根元素 bookstorebookstore / book选取bookstore 下名字为 book的所有子元素。//book选取所有 book 子元素,而不管它们在文档中的位置。bookstore//book选取bookstore 下名字为 book的所有后代元素,而不管它们位于 bookstore 之下的什么位置。//**@**lang选取所有名为 lang 的属性。未知节点
路径表达式结果/bookstore/*选取 bookstore 元素的所有子节点//*选取文档中的所有元素//title[@*]选取所有带有属性的 title 元素。谓语表达式
路径表达式结果/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。/bookstore/ book [position() < 3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。//title[@lang=‘eng’]选取所有 title 元素,要求这些元素拥有值为 eng 的 lang 属性。/bookstore/book[price>35.00]选取所有 bookstore 元素的 book 元素,要求book元素的子元素 price 元素的值须大于 35.00。/bookstore/book[price>35.00]/title选取所有 bookstore 元素中的 book 元素的 title 元素,要求book元素的子元素 price 元素的值须大于 35.00若干路径
路径表达式结果//book/title | //book/price选取所有 book 元素的 title 和 price 元素。//title | //price选取所有文档中的 title 和 price 元素。/bookstore/book/title**|**//price选取所有属于 bookstore 元素的 book 元素的title 元素,以及文档中所有的 price 元素。