解析包含xi:includes和jaxb的xml时遇到问题

Dar*_*air 5 java xml jaxb

我正在使用JAXB解析xml。我有一个如下所示的架构,并且在此架构上定义了两个xml文件a.xml和b.xml。a.xml通过xi:include xml标记对b.xml进行依赖。请提交以下示例以获取更清晰的数据

 I have followng schema definition:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  attributeFormDefault="unqualified">
    <xs:element name="Task">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Details" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="Details">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="NAme" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

这是两个xml文件:

a.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Task xmlns:xi="http://www.w3.org/2001/XInclude">
<Details>
    <xi:include href="b.xml"/>
</Details>
</Task>
Run Code Online (Sandbox Code Playgroud)

b.xml:

 <?xml version="1.0" encoding="UTF-8"?>
 <Detail>
  <Name>Name1</Name>
 </Detail>
<Detail>
   <Name>Name2</Name>
 </Detail>
Run Code Online (Sandbox Code Playgroud)

现在,我使用JAXB SAXFactory将其解析为:

 JAXBContext jaxbcon = JAXBContext.newInstance("schema-definition-jaxb-files");
 unmar = jaxbcon.createUnmarshaller();

 SAXParserFactory spf = SAXParserFactory.newInstance();
 spf.setXIncludeAware(true);
 XMLReader xr = spf.newSAXParser().getXMLReader();
 SAXSource source = new SAXSource(xr, new InputSource(new    FileInputStream(xmlfilename)));
 Object obj = unmar.unmarshal(source);
Run Code Online (Sandbox Code Playgroud)

解析成功,但是Details JAXB标记对象为null。无论如何,a.xml文件中的xi:include标记不会变平。任何的想法?

Evg*_*eev 2

你应该添加

    spf.setNamespaceAware(true);
Run Code Online (Sandbox Code Playgroud)