java解析xml常用的几种方式、

各种方法都用过。现在总结一下。 经常记不住,要找资料。现在总结一下。

xpath 语法 http://www.w3school.com.cn/xpath/xpath_syntax.asp

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());;
		  
	}

}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值