xml解析思想
XML解析即读写XML文档中的数据。框架的开发者通过XML解析读取框架使用者配置的参数信息,开发者也可以通过XML解析读取网络传来的数据。XML有如下解析思想:
DOM
将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:占内存
SAX
逐行读取,基于事件驱动的。
- 优点:不占内存,一般用于手机APP开发中读取XML
- 缺点:只能读取,不能增删改
XML常见解析器
- JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想
- DOM4J:一款非常优秀的解析器
- Jsoup:Jsoup是一款Java的HTML解析器,支持DOM思想。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过CSS以及类似于jQuery的操作方法来取出和操作数据
- PULL:Android操作系统内置的解析器,支持SAX思想
Jsoup快速入门
- 导入jar包
- 加载XML文档进内存,获取DOM树对象Document
- 获取对应的标签Element对象
- 获取数据 ```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 { /*
* 加载xml文档进内存,获取dom数对象Document
* 获取类加载器
* */
ClassLoader classLoader = Demo1.class.getClassLoader();
//使用类加载器找到xml文档路径
String path = classLoader.getResource("xsd/student.xml").getPath();
//加载xml文档进内存,并转成Document对象
Document document=Jsoup.parse(new File(path),"utf-8");
//获取对象的标签Element对象
Elements name =document.getElementsByTag("name");
//获取数据
for(Element element:name){
String text = element.text();
System.out.println(text);
}
}
}
![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树对象
常用方法:
- Element getElementById(String id):根据id获取元素
- Elements getElementsByTag(String tagName):根据标签名获取元素
- Elements getElementsByAttribute(String key):根据属性获取元素
- Elements getElementsByAttributeValue(String key,String value):根据属性名=属性值获取元素。
- Elements select(Sting cssQuery):根据选择器选取元素。
Element对象
Element: 元素对象
常用方法:
- String text():获取元素包含的纯文本。
- String html():获取元素包含的带标签的文本。
- String attr(String attributeKey):获取元素的属性值。
XPath解析
XPath即为XML路径语言,它是一种用来确定标记语言文档中某部分位置的语言。
使用方法:
- 导入 Xpath 的jar包
- 获取 Document 对象
- 将 Document 对象转为 JXDocument 对象
- JXDocument 调用 selN(String xpath) ,获取 List
对象。 - 遍历 List
,调用 JXNode 的 getElement() ,转为 Element 对象。 - 处理 Element 对象。