亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java使用xpath和dom4j解析xml

2019-11-26 15:44:27
字體:
來源:轉載
供稿:網友

1 XML文件解析的4種方法

通常解析XML文件有四種經典的方法?;镜慕馕龇绞接袃煞N,一種叫SAX,另一種叫DOM。SAX是基于事件流的解析,DOM是基于XML文檔樹結構的解析。在此基礎上,為了減少DOM、SAX的編碼量,出現了JDOM,其優點是,20-80原則(帕累托法則),極大減少了代碼量。通常情況下JDOM使用時滿足要實現的功能簡單,如解析、創建等要求。但在底層,JDOM還是使用SAX(最常用)、DOM、Xanan文檔。另外一種是DOM4J,是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。具體四種方法的使用,百度一下,會有眾多詳細的介紹。

2 XPath簡單介紹

XPath是一門在XML文檔中查找信息的語言。XPath用于在 XML 文檔中通過元素和屬性進行導航,并對元素和屬性進行遍歷。XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 同時被構建于 XPath 表達之上。因此,對 XPath 的理解是很多高級 XML 應用的基礎。XPath非常類似對數據庫操作的SQL語言,或者說JQuery,它可以方便開發者抓起文檔中需要的東西。其中DOM4J也支持XPath的使用。

3 DOM4J使用XPath

DOM4J使用XPath解析XML文檔是,首先需要在項目中引用兩個JAR包:

dom4j-1.6.1.jar:DOM4J軟件包,下載地址http://sourceforge.net/projects/dom4j/;

jaxen-xx.xx.jar:通常不添加此包,會引發異常(java.lang.NoClassDefFoundError: org/jaxen/JaxenException),下載地址http://www.jaxen.org/releases.html。

3.1 命名空間(namespace)的干擾

在處理由excel文件或其他格式文件轉換的xml文件時,通常會遇到通過XPath解析得不到結果的情況。這種情況通常是由于命名空間的存在導致的。以下述內容的XML文件為例,通過XPath=" // Workbook/ Worksheet / Table / Row[1]/ Cell[1]/Data[1] "進行簡單的檢索,通常是沒有結果出現的。這就是由于命名空間namespace(xmlns="urn:schemas-microsoft-com:office:spreadsheet")導致的。

復制代碼 代碼如下:

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
  <Worksheet ss:Name="Sheet1">
    <Table ss:ExpandedColumnCount="81" ss:ExpandedRowCount="687" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="52.5" ss:DefaultRowHeight="15.5625">
      <Row ss:AutoFitHeight="0">
  <Cell>
   <Data ss:Type="String">敲代碼的耗子</Data>
  </Cell>
      </Row>
      <Row ss:AutoFitHeight="0">
  <Cell>
   <Data ss:Type="String">Sunny</Data>
  </Cell>
      </Row>
    </Table>
  </Worksheet>
</Workbook>

3.2 XPath對帶有命名空間的xml文件解析

第一種方法(read1()函數):使用XPath語法中自帶的local-name() 和 namespace-uri() 指定你要使用的節點名和命名空間。 XPath表達式書寫較為麻煩。

第二種方法(read2()函數):設置XPath的命名空間,利用setNamespaceURIs()函數。

第三種方法(read3()函數):設置DocumentFactory()的命名空間 ,使用的函數是setXPathNamespaceURIs()。二和三兩種方法的XPath表達式書寫相對簡單。

第四種方法(read4()函數):方法和第三種一樣,但是XPath表達式不同(程序具體體現),主要是為了檢驗XPath表達式的不同,主要指完整程度,是否會對檢索效率產生影響。

(以上四種方法均通過DOM4J結合XPath對XML文件進行解析)

第五種方法(read5()函數):使用DOM結合XPath對XML文件進行解析,主要是為了檢驗性能差異。

沒有什么能夠比代碼更能說明問題的了!果斷上代碼!

復制代碼 代碼如下:

packageXPath;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;

importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.xpath.XPathConstants;
importjavax.xml.xpath.XPathExpression;
importjavax.xml.xpath.XPathExpressionException;
importjavax.xml.xpath.XPathFactory;

importorg.dom4j.Document;
importorg.dom4j.DocumentException;
importorg.dom4j.Element;
importorg.dom4j.XPath;
importorg.dom4j.io.SAXReader;
importorg.w3c.dom.NodeList;
importorg.xml.sax.SAXException;

/**
*DOM4JDOMXMLXPath
*/
publicclassTestDom4jXpath{
publicstaticvoidmain(String[]args){
read1();
read2();
read3();
read4();//read3()方法一樣,但是XPath表達式不同
read5();
}

publicstaticvoidread1(){
/*
*uselocal-name()andnamespace-uri()inXPath
*/
try{
longstartTime=System.currentTimeMillis();
SAXReaderreader=newSAXReader();
InputStreamin=TestDom4jXpath.class.getClassLoader().getResourceAsStream("XPath//XXX.xml");
Documentdoc=reader.read(in);
/*Stringxpath="http://*[local-name()='Workbook'andnamespace-uri()='urn:schemas-microsoft-com:office:spreadsheet']"
+"/*[local-name()='Worksheet']"
+"/*[local-name()='Table']"
+"/*[local-name()='Row'][4]"
+"/*[local-name()='Cell'][3]"
+"/*[local-name()='Data'][1]";*/
Stringxpath="http://*[local-name()='Row'][4]/*[local-name()='Cell'][3]/*[local-name()='Data'][1]";
System.err.println("=====uselocal-name()andnamespace-uri()inXPath====");
System.err.println("XPath:"+xpath);
@SuppressWarnings("unchecked")
List<Element>list=doc.selectNodes(xpath);
for(Objecto:list){
Elemente=(Element)o;
Stringshow=e.getStringValue();
System.out.println("show="+show);
longendTime=System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
}
}catch(DocumentExceptione){
e.printStackTrace();
}
}

publicstaticvoidread2(){
/*
*setxpathnamespace(setNamespaceURIs)
*/
try{
longstartTime=System.currentTimeMillis();
Mapmap=newHashMap();
map.put("Workbook","urn:schemas-microsoft-com:office:spreadsheet");
SAXReaderreader=newSAXReader();
InputStreamin=TestDom4jXpath.class.getClassLoader().getResourceAsStream("XPath//XXX.xml");
Documentdoc=reader.read(in);
Stringxpath="http://Workbook:Row[4]/Workbook:Cell[3]/Workbook:Data[1]";
System.err.println("=====usesetNamespaceURIs()tosetxpathnamespace====");
System.err.println("XPath:"+xpath);
XPathx=doc.createXPath(xpath);
x.setNamespaceURIs(map);
@SuppressWarnings("unchecked")
List<Element>list=x.selectNodes(doc);
for(Objecto:list){
Elemente=(Element)o;
Stringshow=e.getStringValue();
System.out.println("show="+show);
longendTime=System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
}
}catch(DocumentExceptione){
e.printStackTrace();
}
}

publicstaticvoidread3(){
/*
*setDocumentFactory()namespace(setXPathNamespaceURIs)
*/
try{
longstartTime=System.currentTimeMillis();
Mapmap=newHashMap();
map.put("Workbook","urn:schemas-microsoft-com:office:spreadsheet");
SAXReaderreader=newSAXReader();
InputStreamin=TestDom4jXpath.class.getClassLoader().getResourceAsStream("XPath//XXX.xml");
reader.getDocumentFactory().setXPathNamespaceURIs(map);
Documentdoc=reader.read(in);
Stringxpath="http://Workbook:Row[4]/Workbook:Cell[3]/Workbook:Data[1]";
System.err.println("=====usesetXPathNamespaceURIs()tosetDocumentFactory()namespace====");
System.err.println("XPath:"+xpath);
@SuppressWarnings("unchecked")
List<Element>list=doc.selectNodes(xpath);
for(Objecto:list){
Elemente=(Element)o;
Stringshow=e.getStringValue();
System.out.println("show="+show);
longendTime=System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
}
}catch(DocumentExceptione){
e.printStackTrace();
}
}

publicstaticvoidread4(){
/*
*同read3()方法一樣,但是XPath表達式不同
*/
try{
longstartTime=System.currentTimeMillis();
Mapmap=newHashMap();
map.put("Workbook","urn:schemas-microsoft-com:office:spreadsheet");
SAXReaderreader=newSAXReader();
InputStreamin=TestDom4jXpath.class.getClassLoader().getResourceAsStream("XPath//XXX.xml");
reader.getDocumentFactory().setXPathNamespaceURIs(map);
Documentdoc=reader.read(in);
Stringxpath="http://Workbook:Worksheet/Workbook:Table/Workbook:Row[4]/Workbook:Cell[3]/Workbook:Data[1]";
System.err.println("=====usesetXPathNamespaceURIs()tosetDocumentFactory()namespace====");
System.err.println("XPath:"+xpath);
@SuppressWarnings("unchecked")
List<Element>list=doc.selectNodes(xpath);
for(Objecto:list){
Elemente=(Element)o;
Stringshow=e.getStringValue();
System.out.println("show="+show);
longendTime=System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
}
}catch(DocumentExceptione){
e.printStackTrace();
}
}

publicstaticvoidread5(){
/*
*DOMandXPath
*/
try{
longstartTime=System.currentTimeMillis();
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilderbuilder=dbf.newDocumentBuilder();
InputStreamin=TestDom4jXpath.class.getClassLoader().getResourceAsStream("XPath//XXX.xml");
org.w3c.dom.Documentdoc=builder.parse(in);
XPathFactoryfactory=XPathFactory.newInstance();
javax.xml.xpath.XPathx=factory.newXPath();
//選取所有class元素的name屬性
Stringxpath="http://Workbook/Worksheet/Table/Row[4]/Cell[3]/Data[1]";
System.err.println("=====DomXPath====");
System.err.println("XPath:"+xpath);
XPathExpressionexpr=x.compile(xpath);
NodeListnodes=(NodeList)expr.evaluate(doc,XPathConstants.NODE);
for(inti=0;i<nodes.getLength();i++){
System.out.println("show="+nodes.item(i).getNodeValue());
longendTime=System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
}
}catch(XPathExpressionExceptione){
e.printStackTrace();
}catch(ParserConfigurationExceptione){
e.printStackTrace();
}catch(SAXExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}

PS:這里再為大家提供幾款關于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉換工具:
http://tools.VeVB.COm/code/xmljson

在線格式化XML/在線壓縮XML:
http://tools.VeVB.COm/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.VeVB.COm/code/xml_format_compress

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美色图片| 国产精品96久久久久久又黄又硬| 91精品国产沙发| 国自在线精品视频| 国产精品高清在线| 欧洲精品毛片网站| 亚洲精品成人久久| 欧美激情一级精品国产| 欧美性猛xxx| 在线观看国产精品淫| 国产日韩亚洲欧美| 精品国产户外野外| 国产精品久久久久久久久久东京| 国产视频精品va久久久久久| 欧美日韩中国免费专区在线看| 精品国产91久久久久久| 色狠狠av一区二区三区香蕉蜜桃| 欧美精品在线免费观看| 91成人在线播放| 国产视频观看一区| 亚洲一二在线观看| 国产成+人+综合+亚洲欧美丁香花| 欧美日韩在线另类| 久久国产加勒比精品无码| 亚洲区免费影片| 国产成人激情视频| 亚洲香蕉av在线一区二区三区| 国产日本欧美一区二区三区在线| 狠狠操狠狠色综合网| 亚洲午夜国产成人av电影男同| 8x海外华人永久免费日韩内陆视频| 亚洲国内精品视频| 欧美日韩高清在线观看| 欧美中文字幕视频| 精品久久久香蕉免费精品视频| 91精品91久久久久久| 久久精品亚洲精品| 精品视频在线播放免| 欧美激情一级二级| 日韩国产中文字幕| 日韩综合中文字幕| 久久99久久久久久久噜噜| 欧美成人亚洲成人日韩成人| 自拍偷拍亚洲精品| 国产亚洲美女精品久久久| 欧美美女操人视频| 日韩av在线最新| 96sao精品视频在线观看| 久久中文字幕在线视频| 日韩欧美第一页| 久久久久久香蕉网| 亚洲网站视频福利| 亚洲综合中文字幕在线观看| 中文国产成人精品久久一| 91亚洲国产成人久久精品网站| 91精品啪aⅴ在线观看国产| 欧美有码在线视频| 亚洲bt欧美bt日本bt| 久久综合久久美利坚合众国| 538国产精品一区二区免费视频| 精品国产91乱高清在线观看| 亚洲精品视频在线观看视频| 久久视频在线观看免费| 日韩av网址在线观看| 精品国产网站地址| 国内精品久久久久伊人av| 亚洲第一av在线| 欧美视频中文字幕在线| 91香蕉亚洲精品| 欧美日韩成人网| 国内偷自视频区视频综合| 久久久国产精品亚洲一区| 8050国产精品久久久久久| 欧美性猛交xxxx免费看| 亚洲日本aⅴ片在线观看香蕉| 亚洲免费伊人电影在线观看av| 欧美日韩一区二区三区在线免费观看| 欧美裸体视频网站| 日韩电影免费观看中文字幕| 2019中文在线观看| 亚洲电影免费观看高清完整版在线观看| 韩国精品美女www爽爽爽视频| 国产精品久久99久久| 亚洲性生活视频| 欧美精品18videos性欧美| 中文欧美日本在线资源| 91探花福利精品国产自产在线| 亚洲第一中文字幕在线观看| 少妇高潮 亚洲精品| 亚洲国产成人久久综合一区| 亚洲在线www| 狠狠爱在线视频一区| 精品亚洲一区二区| 色婷婷av一区二区三区久久| 亚洲精品美女在线观看播放| 97视频免费在线观看| 亚洲一区二区三区毛片| 亚洲人成在线免费观看| 亚洲一区二区三区在线免费观看| 欧美精品激情blacked18| 欧美一级大胆视频| 欧美日产国产成人免费图片| 国产精品视频yy9099| 中文字幕在线看视频国产欧美在线看完整| 久久亚洲私人国产精品va| 欧美性生交大片免费| 日韩精品欧美激情| 亚洲国产中文字幕久久网| 精品国产欧美一区二区三区成人| 国产亚洲精品久久久久久牛牛| 国产综合福利在线| 日韩av在线天堂网| 91在线精品视频| 在线色欧美三级视频| 精品久久久久久中文字幕大豆网| 国产精品视频久久| 欧美日韩在线免费| 日韩欧美在线中文字幕| 久久精品一偷一偷国产| 国产日韩亚洲欧美| 91沈先生在线观看| 欧美做受高潮1| 亚洲国产日韩欧美综合久久| 都市激情亚洲色图| 奇米4444一区二区三区| 97免费中文视频在线观看| 久久精品国产亚洲7777| 国产一区二区丝袜| 91精品国产777在线观看| 亚洲精品午夜精品| 久久久久久91| 亚洲一区国产精品| 欧美精品中文字幕一区| 欧美极品少妇全裸体| 91日本在线视频| 91久久久精品| 欧美高清视频在线观看| 91成人国产在线观看| 欧美日韩在线视频首页| 亚洲一区二区三区sesese| 在线亚洲欧美视频| 欧美噜噜久久久xxx| 欧美激情第6页| 欧美视频在线观看免费| 影音先锋日韩有码| 亚洲天堂av在线免费| 日韩综合中文字幕| 亚洲国产精品福利| 88xx成人精品| 国产99视频在线观看| 2019亚洲日韩新视频| 亚洲一二三在线| 欧美日韩国产丝袜另类| 亚洲电影第1页| 日韩有码在线播放| 亚洲国产精品999| 国产精品久久久久久久av大片| 欧美一级在线亚洲天堂| 蜜月aⅴ免费一区二区三区| 亚洲男人第一网站| 国产精品嫩草视频| 高清欧美性猛交| 国产精品激情av在线播放| 亚洲第一精品福利|