java는 xpath와 dom4j를 사용하여 xml을 구문 분석합니다.
1 XML文件解析的4种方法
通常解析XML文件有四种经典的方法。基本的解析方式有两种,一种叫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="//*[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="//*[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="//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="//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="//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="//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(); } } }
更多java使用xpath和dom4j解析xml相关文章请关注PHP中文网!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











모바일 XML에서 PDF의 속도는 다음 요인에 따라 다릅니다. XML 구조의 복잡성. 모바일 하드웨어 구성 변환 방법 (라이브러리, 알고리즘) 코드 품질 최적화 방법 (효율적인 라이브러리 선택, 알고리즘 최적화, 캐시 데이터 및 다중 스레딩 사용). 전반적으로 절대적인 답변은 없으며 특정 상황에 따라 최적화해야합니다.

단일 애플리케이션으로 휴대 전화에서 직접 XML에서 PDF 변환을 완료하는 것은 불가능합니다. 두 단계를 통해 달성 할 수있는 클라우드 서비스를 사용해야합니다. 1. 클라우드에서 XML을 PDF로 변환하십시오. 2. 휴대 전화에서 변환 된 PDF 파일에 액세스하거나 다운로드하십시오.

휴대 전화에서 XML을 PDF로 직접 변환하는 것은 쉽지 않지만 클라우드 서비스를 통해 달성 할 수 있습니다. 가벼운 모바일 앱을 사용하여 XML 파일을 업로드하고 생성 된 PDF를 수신하고 클라우드 API로 변환하는 것이 좋습니다. Cloud API는 Serverless Computing Services를 사용하고 올바른 플랫폼을 선택하는 것이 중요합니다. XML 구문 분석 및 PDF 생성을 처리 할 때 복잡성, 오류 처리, 보안 및 최적화 전략을 고려해야합니다. 전체 프로세스에는 프론트 엔드 앱과 백엔드 API가 함께 작동해야하며 다양한 기술에 대한 이해가 필요합니다.

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

XML 서식 도구는 규칙에 따라 코드를 입력하여 가독성과 이해를 향상시킬 수 있습니다. 도구를 선택할 때는 사용자 정의 기능, 특수 상황 처리, 성능 및 사용 편의성에주의하십시오. 일반적으로 사용되는 도구 유형에는 온라인 도구, IDE 플러그인 및 명령 줄 도구가 포함됩니다.

XML을 PDF로 직접 변환하는 응용 프로그램은 근본적으로 다른 두 형식이므로 찾을 수 없습니다. XML은 데이터를 저장하는 데 사용되는 반면 PDF는 문서를 표시하는 데 사용됩니다. 변환을 완료하려면 Python 및 ReportLab과 같은 프로그래밍 언어 및 라이브러리를 사용하여 XML 데이터를 구문 분석하고 PDF 문서를 생성 할 수 있습니다.

XML 온라인 형식 도구는 지저분한 XML 코드를 읽기 쉬운 형식으로 자동 구성하고 형식을 유지 관리합니다. XML의 구문 트리를 구문 분석하고 서식 규칙을 적용함으로써 이러한 도구는 코드의 구조를 최적화하여 유지 관리 가능성과 팀워크 효율성을 향상시킵니다.

대부분의 텍스트 편집기를 사용하여 XML 파일을여십시오. 보다 직관적 인 트리 디스플레이가 필요한 경우 Oxygen XML 편집기 또는 XMLSPy와 같은 XML 편집기를 사용할 수 있습니다. 프로그램에서 XML 데이터를 처리하는 경우 프로그래밍 언어 (예 : Python) 및 XML 라이브러 (예 : XML.etree.elementtree)를 사용하여 구문 분석해야합니다.
