XML&DOM解析XML

待我称王封你为后i 2024-03-31 09:47 201阅读 0赞

目录

XML

XML(EXtensible Markup Language)

特点

作用

XML标签

XML转义符列表

XML编写注意事项

DOM解析XML

DOM介绍

常用API


XML

XML(EXtensible Markup Language)

  • 可扩展标记语言

特点

  • XML与操作系统、编程语言的开发平台无关
  • 实现不同系统之间的数据交换

作用

  • 数据交互
  • 配置应用程序和网站
  • Ajax基石

XML标签

XML文档内容由一系列标签元素组成

<元素名 属性名=“属性值”>元素内容</元素名>

  • 属性值用引号包裹
  • 一个元素可以有多个属性
  • 属性值中不能直接包含<、&
  • 不建议使用的字符:“、‘、>

XML转义符列表


































符号 转义符
<

&lt;

> &gt;

&quot;

&apos;
& &amp;
空格 &#160;

XML编写注意事项

  1. 所有XML元素都必须有结束标签
  2. XML标签对大小写敏感
  3. XML必须正确的嵌套
  4. 同级标签以缩进对齐
  5. 元素名称可以包含字母、数字或其他的字符
  6. 元素名称不能以数字或者标点符号开始
  7. 元素名称中不能含空格

    <?xml version=”1.0” encoding=”UTF-8” ?>



    格林童话
    格林
    价格:20.00


    安徒生童话
    安徒生
    价格:19.9

    <?xml version=”1.0” encoding=”UTF-8” ?>


    S
    M
    L
    XL
    XXL

结果:

efcdbf59aa4642a2b96638e452263064.png

DOM解析XML

DOM介绍

  • 文档对象模型(Document Object Model)
  • DOM把XML文档映射成一个倒挂的树

6950653d67af4de5b32e3cb8312ebf1a.png

常用API

DOM解析包:org.w3c.dom






























常用接口

常用方法

说明

Document:表示整个 XML 文档 NodeList getElementsByTagName(String Tag) 按文档顺序返回文档中指定标记名称的所有元素集合
Element createElement(String tagName) 创建指定标记名称的元素
Node:该文档树中的单个节点 NodeList getChildNodes() 获取该元素的所有子节点,返回节点集合
Element:XML 文档中的一个元素 String getTagName() 获取元素名称
  1. /**
  2. 收藏信息.xml
  3. */
  4. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  5. <PhoneInfo>
  6. <Brand name="华为">
  7. <Type name="Mate30 Pro"/>
  8. <Type name="P30 Pro"/>
  9. <Type name="nova 6"/>
  10. </Brand>
  11. <Brand name="苹果">
  12. <Type name="iPhone11 Pro"/>
  13. </Brand>
  14. </PhoneInfo>
  15. import org.w3c.dom.Document;
  16. import org.w3c.dom.Element;
  17. import org.w3c.dom.Node;
  18. import org.w3c.dom.NodeList;
  19. import org.xml.sax.SAXException;
  20. import javax.xml.parsers.DocumentBuilder;
  21. import javax.xml.parsers.DocumentBuilderFactory;
  22. import javax.xml.parsers.ParserConfigurationException;
  23. import javax.xml.transform.Transformer;
  24. import javax.xml.transform.TransformerConfigurationException;
  25. import javax.xml.transform.TransformerException;
  26. import javax.xml.transform.TransformerFactory;
  27. import javax.xml.transform.dom.DOMSource;
  28. import javax.xml.transform.stream.StreamResult;
  29. import java.io.File;
  30. import java.io.IOException;
  31. public class ParseXMLDmo {
  32. Document document = null;
  33. public static void main(String[] args) {
  34. ParseXMLDmo parseXMLDmo = new ParseXMLDmo();
  35. parseXMLDmo.getDocument();
  36. // System.out.println(parseXMLDmo.document);
  37. parseXMLDmo.showInfo();
  38. parseXMLDmo.addNode();
  39. }
  40. private void addNode() {
  41. Element brand = document.createElement("Brand");
  42. brand.setAttribute("name","小米");
  43. Element type = document.createElement("Type");
  44. type.setAttribute("name","小米6");
  45. brand.appendChild(type);
  46. document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
  47. this.saveXML("src/main/java/XML/收藏.xml");
  48. }
  49. private void saveXML(String path) {
  50. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  51. try {
  52. Transformer transformer = transformerFactory.newTransformer();
  53. DOMSource source = new DOMSource(document);
  54. StreamResult result = new StreamResult(new File(path));
  55. transformer.transform(source,result);
  56. } catch (TransformerConfigurationException e) {
  57. e.printStackTrace();
  58. } catch (TransformerException e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. private void showInfo() {
  63. //NodeList getElementsByTagName(String Tag) 按文档顺序返回文档中指定标记名称的所有元素集合
  64. NodeList nodeList = document.getElementsByTagName("Brand");
  65. for (int i = 0; i < nodeList.getLength(); i++) {
  66. Node node = nodeList.item(i);
  67. Element node1 = (Element) node;
  68. String name = node1.getAttribute("name");
  69. System.out.println(name);
  70. //NodeList getChildNodes() 获取该元素的所有子节点,返回节点集合
  71. NodeList childNodes = node1.getChildNodes();
  72. for (int j = 0; j < childNodes.getLength(); j++) {
  73. Node node2 = childNodes.item(j);
  74. if (node2.getNodeType() == Node.ELEMENT_NODE) {
  75. Element node21 = (Element) node2;
  76. String name1 = node21.getAttribute("name");
  77. System.out.println(name1);
  78. }
  79. }
  80. }
  81. }
  82. public void getDocument() {
  83. try {
  84. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  85. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  86. document = documentBuilder.parse("src/main/java/XML/收藏信息.xml");
  87. } catch (ParserConfigurationException e) {
  88. e.printStackTrace();
  89. } catch (IOException e) {
  90. e.printStackTrace();
  91. } catch (SAXException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. }

输出结果:输出信息在一个新的xml文件中

  1. /**
  2. 收藏.xml
  3. */
  4. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  5. <PhoneInfo>
  6. <Brand name="华为">
  7. <Type name="Mate30 Pro"/>
  8. <Type name="P30 Pro"/>
  9. <Type name="nova 6"/>
  10. </Brand>
  11. <Brand name="苹果">
  12. <Type name="iPhone11 Pro"/>
  13. </Brand>
  14. <Brand name="小米">
  15. <Type name="小米6"/>
  16. </Brand>
  17. </PhoneInfo>

控制台输出收藏信息.xml文件中的信息

9fb134fa60884235ae9470fe9acd2765.png

发表评论

表情:
评论列表 (有 0 条评论,201人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML的运用(XML解析

    一、XML文件的三种配置位置机读取方式 > Java中配置XML文件的三种配置位置机读取方式:常用的三种 1、同包下 在演式之前我们把前期演示的部分给准备好:

    相关 解析XML

    在tomcat的webapps下ROOT目录下创建xml文件,记得右键另存改编码方式为UTF-8 下面上代码: xml部分: <?xml version="1.0