java解析xml常用的几种方式总结
各种方法都用过。现在总结一下。 经常记不住,要找资料。现在总结一下。
xml 文件如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
<aa>
<bb>
<cc>ccccc</cc>
</bb>
</aa>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
package sort;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
public class D2 {
/**
* 直接使用DOM解析
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
DocumentBuilder sb = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document root = sb.parse(D2.class.getClassLoader().getResourceAsStream("NewFile.xml"));
System.out.println(root.getChildNodes().item(0).getNodeName());
}
}
package sort;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
public class D {
/**
* 使用SAX解析
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
SAXParserFactory factory = SAXParserFactoryImpl.newInstance();
SAXParser parser = factory.newSAXParser() ;
parser.parse(D.class.getClassLoader().getResourceAsStream("NewFile.xml"),
new DefaultHandler(){
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("characters");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("endDocument");
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
// TODO Auto-generated method stub
System.out.println("endElement");
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("startDocument");
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
// TODO Auto-generated method stub
System.out.println("startElement");
}
}) ;
}
}
package sort;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
public class D3 {
/**
* 使用XMLStream解析
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
XMLInputFactory xmlFactor = XMLInputFactory.newFactory();
XMLStreamReader reader =
xmlFactor.createXMLStreamReader(D3.class.getClassLoader().getResourceAsStream("NewFile.xml"));
while(reader.hasNext()){
int point = reader.next() ;
switch(point){
case XMLStreamReader.START_ELEMENT :
System.out.println("start_element");
case XMLStreamReader.END_ELEMENT :
// do something...
}
}
}
}
package sort;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
/**
* 使用DOM4j XPATH解析XML (需要加入依赖jar文件)
* @author zhoufeng
*
*/
public class D4 {
public static void main(String[] args) throws Exception{
SAXReader reader = new SAXReader() ;
Document root = reader.read(D4.class.getClassLoader().getResourceAsStream("NewFile.xml"));
/* 选择所有的cc节点 */
System.out.println(root.selectNodes("//cc").size());;
/*选择所有的book节点,并且有子节点author的*/
System.out.println((root.selectNodes("//book[author]").size()));;
/* 选择所有book节点,并且有属性category的 */
System.out.println((root.selectNodes("//book[@category]").size()));;
/* 选择所有book节点,并且有子节点author值为James McGovern ,并且还有category属性节点值为WEB 下面的price节点*/
System.out.println(root.selectNodes("//book[author='James McGovern'][@category='WEB']/price").size());;
}
}
相关文章
SpringCloud Alibaba Seata (收藏版)
Seata是一款开源的分布式事务解决方案,致力于在微服务架构在提供高性能和简单一样的分布式事务服务。这篇文章主要介绍了SpringCloud Alibaba Seata 的相关知识,需要的朋友可以参考下2020-10-10通过Feign进行调用@FeignClient 找不到的解决方案
这篇文章主要介绍了通过Feign进行调用@FeignClient 找不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03Java中线程状态+线程安全问题+synchronized的用法详解
这篇文章主要介绍了Java中线程状态+线程安全问题+synchronized的用法详解,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-04-04httpclient的disableConnectionState方法工作流程
这篇文章主要为大家介绍了httpclient的disableConnectionState方法工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-11-11
最新评论