java解析xml常用的2种方法(这2种可以解决开发中遇到的xml解析的所有问题)
第一种 dom解析
<?xml version="1.0" encoding="GBK"?>
<address>
<linkman>
<name>Van_DarkHolme</name>
<email>van_darkholme@163.com</email>
</linkman>
<linkman1>
<name>Bili</name>
<email>Bili@163.com</email>
</linkman1>
</address>
public void readXml() throws Exception {
//建立DocumentBuilderFactor,用于获得DocumentBuilder对象:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//建立DocumentBuidler;
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//import org.w3c.dom.Document;
Document document = documentBuilder.parse(new File("D:/1.xml"));
NodeList node = document.getElementsByTagName("linkman");
for (int i = 0; i < node.getLength(); i++) {
Element e = (Element)node.item(i);
String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
String email = e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue();
System.out.println(name);
System.out.println(email);
}
结果
Van_DarkHolme
van_darkholme@163.com
第二种 dom4j解析
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="001">
<id>9</id>
<title>Harry Potter</title>
<author>J K. Rowling</author>
</book>
<book id="002">
<title>Learning XML</title>
<author>Erik T. Ray</author>
</book>
<book1 id="003">
<title>Learning XML111</title>
<author>Erik T. Ray111</author>
</book1>
</books>
引入dom4j jar包
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
代码
public void readXml() throws Exception{
//1.创建Reader对象
SAXReader saxReader = new SAXReader();
//2.加载xml
Document document = saxReader.read(new File("D:/1.xml"));
//3.获取根节点
Element rootElement = document.getRootElement();
// rootElement.elements()获取根节点下所有的节点,
List<Element> elements = rootElement.elements();
//获取节点book1下属性为id的值 003
rootElement.element("book1").attribute("id").getValue();
for (Element element : elements) {
//依次遍历根节点下的节点 book book book1
element.getName();
//依次遍历根节点下的节点对应属性为id的值 001 002 003
System.out.println(element.attribute("id").getValue());
System.out.println("----------------------------");
//同样道理 继续依次获取该节点下的节点
List<Element> child = element.elements();
for (Element element1 : child) {
/依次/获取子节点 id title author 、title author、title author
element1.getName();
//依次获取子节点的值 9 Harry Potter J K. Rowling、.......
System.out.println(element1.getText());
}
}
// 获取第二个节点book的属性为id的值 002
elements.get(1).attribute("id").getValue();
// 获取根节点下第二个节点book所有节点
List<Element> elements1 = elements.get(1).elements();
//获取根节点下第二个节点book节点下的第二个节点author的值 Erik T. Ray
elements.get(1).elements().get(1).getText();
}
使用dom解析将xml树结构全部加载到内存中,保留了树结构,可以对树结构进行增删改 但是xml过大会导致内存溢出
dom4j的SAXread是一行一行的解析的,不会产生内存问题,但是不能进行增删改操作
今天的文章java解析xml文件分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30106.html