【问题标题】:Error parsing an XML with xinclude and xpointer使用 xinclude 和 xpointer 解析 XML 时出错
【发布时间】:2014-08-21 23:45:10
【问题描述】:

我正在使用 Jdom 2.0.5 并打开一个文档 one.xml,该文档通过 xinclude 包含另一个文件 two.xml。我按如下方式调用构建器:

    SAXBuilder builder = new SAXBuilder();
    builder.setJDOMFactory(new LocatedJDOMFactory());
    builder.setFeature("http://apache.org/xml/features/xinclude", true);
    Document doc = builder.build(new File("c:\\temp\\one.xml"));
    XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
    System.out.println("salida es "+out.outputString(doc));

文件one.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>
<eco xmlns:xi="http://www.w3.org/2001/XInclude">
    <tmp-path>/opt/eco/ecoprd/tmp</tmp-path>
    <!--
    <xi:include href="two.xml" parse="xml"/>
    -->
    <xi:include href="two.xml" parse="xml" xpointer="web-servers"/>
</eco>

和two.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>
<eco>
    <web-servers xml:id="web-servers">
        <valuations>
            <url-base>http://naboo:8080</url-base>
            <context>/Statements</context>
            <path>/services/ValuationsXMLGenerator</path>
        </valuations>
    </web-servers>
</eco>

在没有 xpointer 的情况下包含文件可以正常工作。但是如果我使用xpointer,我会得到如下错误:

org.jdom2.input.JDOMParseException: Error on line 7 of document file:/c:/temp/one.xml: An 'include' failed, and no 'fallback' element was found.
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:228)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
    at test.XMLTest.main(XMLTest.java:17)
Caused by: org.xml.sax.SAXParseException; systemId: file:/c:/temp/one.xml; lineNumber: 7; columnNumber: 65; An 'include' failed, and no 'fallback' element was found.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportFatalError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportFatalError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportFatalError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.emptyElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
    ... 4 more

我错过了什么?据说 xpointer="web-servers" 应该使用 xml:id="web-servers" 获取元素 web-serves,但事实并非如此。有什么建议吗?

【问题讨论】:

    标签: xml xerces xinclude


    【解决方案1】:

    Xerces 仅支持 xpointer element() 方案

    也许

    <xi:include href="two.xml" parse="xml" xpointer="element(web-servers)"/>
    

    <xi:include href="two.xml" parse="xml" xpointer="element(/1/1)"/>
    

    第一个 /1 是“eco”元素 第二个 /1 是“web-servers”元素

    【讨论】:

      【解决方案2】:

      如果你想使用 xpointer,试试这个:http://etourdot.github.io/xincproc/

      【讨论】:

        猜你喜欢
        • 2013-05-31
        • 2019-04-09
        • 1970-01-01
        • 2013-05-09
        • 2012-06-01
        • 2016-06-12
        • 2013-03-07
        • 1970-01-01
        • 2015-12-12
        相关资源
        最近更新 更多