xml解析思想

XML解析即读写XML文档中的数据。框架的开发者通过XML解析读取框架使用者配置的参数信息,开发者也可以通过XML解析读取网络传来的数据。XML有如下解析思想:
DOM
将标记语言文档一次性加载进内存,在内存中形成一颗dom树

  • 优点:操作方便,可以对文档进行CRUD的所有操作
  • 缺点:占内存

image.png

SAX
逐行读取,基于事件驱动的。

  • 优点:不占内存,一般用于手机APP开发中读取XML
  • 缺点:只能读取,不能增删改

image.png

XML常见解析器

  • JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想
  • DOM4J:一款非常优秀的解析器
  • Jsoup:Jsoup是一款Java的HTML解析器,支持DOM思想。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过CSS以及类似于jQuery的操作方法来取出和操作数据
  • PULL:Android操作系统内置的解析器,支持SAX思想

Jsoup快速入门

  1. 导入jar包
  2. 加载XML文档进内存,获取DOM树对象Document
  3. 获取对应的标签Element对象
  4. 获取数据 ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;

import java.io.File; import java.io.IOException;

public class Demo1 { //获取xml中的所有学生姓名 public static void main(String[] args) throws IOException { /*

  1. * 加载xml文档进内存,获取dom数对象Document
  2. * 获取类加载器
  3. * */
  4. ClassLoader classLoader = Demo1.class.getClassLoader();
  5. //使用类加载器找到xml文档路径
  6. String path = classLoader.getResource("xsd/student.xml").getPath();
  7. //加载xml文档进内存,并转成Document对象
  8. Document document=Jsoup.parse(new File(path),"utf-8");
  9. //获取对象的标签Element对象
  10. Elements name =document.getElementsByTag("name");
  11. //获取数据
  12. for(Element element:name){
  13. String text = element.text();
  14. System.out.println(text);
  15. }
  16. }

}


![image.png](https://cdn.nlark.com/yuque/0/2022/png/25812280/1655907001814-ca9f88f2-0f0f-4611-b8e3-375630cb88fa.png#clientId=u87ddcd12-d35c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=319&id=ub040040a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=544&originWidth=740&originalType=binary&ratio=1&rotation=0&showTitle=false&size=260071&status=done&style=none&taskId=ud3fcfc06-ce4d-48e3-8fe0-319c54c9a31&title=&width=434)<br />Jsoup:可以解析xml或html,形成dom树对象。

- static Document parse(File in, String charsetName):解析本地文件
- static Document parse(String html):解析html或xml字符串
- static Document parse(URL url, int timeoutMillis):解析网页源文件
```java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.net.URL;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        //解析本地xml文件
//        String path = Demo2.class.getClassLoader().getResource("xsd/student.xml").getPath();
//        Document document = Jsoup.parse(new File(path),"utf-8");
//        System.out.println(document);
//        System.out.println("---------------------");

        //解析字符串
        Document document1 = Jsoup.parse("<!ELEMENT students (student*) >\n" +
                "<!ELEMENT student (name,age,sex)>\n" +
                "<!ELEMENT name (#PCDATA)>\n" +
                "<!ELEMENT age (#PCDATA)>\n" +
                "<!ELEMENT sex (#PCDATA)>\n" +
                "<!ATTLIST student number ID #REQUIRED>");
        System.out.println(document1);

        //解析网络资源
        Document document2 = Jsoup.parse(new URL("https://www.baidu.com"),2000);
        System.out.println(document2);
    }
}

Document对象

Document:xml的dom树对象
常用方法:

  1. Element getElementById(String id):根据id获取元素
  2. Elements getElementsByTag(String tagName):根据标签名获取元素
  3. Elements getElementsByAttribute(String key):根据属性获取元素
  4. Elements getElementsByAttributeValue(String key,String value):根据属性名=属性值获取元素。
  5. Elements select(Sting cssQuery):根据选择器选取元素。

Element对象

image.png
Element: 元素对象
常用方法:

  1. String text():获取元素包含的纯文本。
  2. String html():获取元素包含的带标签的文本。
  3. String attr(String attributeKey):获取元素的属性值。

XPath解析

XPath即为XML路径语言,它是一种用来确定标记语言文档中某部分位置的语言。
使用方法:

  1. 导入 Xpath 的jar包
  2. 获取 Document 对象
  3. 将 Document 对象转为 JXDocument 对象
  4. JXDocument 调用 selN(String xpath) ,获取 List 对象。
  5. 遍历 List ,调用 JXNode 的 getElement() ,转为 Element 对象。
  6. 处理 Element 对象。