【问题标题】:SAXParser doesn't allow XincludeSAXParser 不允许 Xinclude
【发布时间】:2014-11-04 10:11:29
【问题描述】:

我正在尝试解组包含 <xi:include> 标记的 xml 文档。但是 SAXParser 不允许这样做,即使我明确告诉 SAXParserFactory 允许这样做。

Java 代码:

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setXIncludeaware(true);
spf.setNamespaceAwere(true);

spf.setFeature("http://apache.org/xml/features/xinclude", true);
spf.setFeature("http://apache.org/xml/features/xinclude/fixup-base-uris", true);

XMLReader xr = spf.newSAXParser().getXMLReader();
SAXSource source = new SAXSource(xr, new InputSource(inputStream));
JAXBElement<MyClass> el = unmarshaller.unmarshal(source, MyClass.class);

要读取的 XML 文档

<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="http://www.example.com/test" xmlns:ext="http://www.example.com/test" xmlns:xi="http://www.w3.org/2003/XInclude">
    <visibility>
        <resourceConstraints>
            <resourceConstraint ext:resourceId="resourceOne">
                <role ext:show="true">AdminUsers</role>
            </resourceConstraint>
            <resourceConstraint ext:resourceId="resourceTwo">
                <role ext:show="true">AdminUsers</role>
            </resourceConstraint>
        </resourceConstraints>
        <xi:include href="extraContent.xml" />
    </visibility>
</extension>

当我运行它时,我得到了这个异常:

org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 50; cvc-complex-type.2.4.a: Invalid content was found starting with element 'xi:include'. One of '{"http://www.example.com/test":resourceConstraints}' is expected.

当我从 XML 文档中删除 &lt;xi:include&gt; 标记时,文件被解组就好了。解组器附加了一个模式。架构不允许 &lt;xi:include&gt;

【问题讨论】:

    标签: java xml sax xinclude


    【解决方案1】:

    我使用了xmlns:xi="http://www.w3.org/2003/XInclude",而我应该使用xmlns:xi="http://www.w3.org/2001/XInclude"

    问题现已解决!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2014-01-19
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多