加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析包含xi的xml时面临的问题:包含jaxb

发布时间:2020-12-16 22:55:34 所属栏目:百科 来源:网络整理
导读:我正在使用JAXB来解析xml.我有一个如下的模式,以及在此模式上定义的两个xml文件a.xml和b.xml. a.xml与b.xml通过xi:include xml标记有依赖关系.请提交以下示例以获取更清晰的数据 I have followng schema definition:?xml version="1.0" encoding="UTF-8"?xs
我正在使用JAXB来解析xml.我有一个如下的模式,以及在此模式上定义的两个xml文件a.xml和b.xml. a.xml与b.xml通过xi:include 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>

这是两个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>

B.XML:

<?xml version="1.0" encoding="UTF-8"?>
 <Detail>
  <Name>Name1</Name>
 </Detail>
<Detail>
   <Name>Name2</Name>
 </Detail>

现在我使用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);

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

解决方法

试试这个,它肯定有效:

public class Test {
    public String include;

    public static void main(String[] args) throws Exception {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setXIncludeAware(true);
        spf.setNamespaceAware(true);
        XMLReader xr = spf.newSAXParser().getXMLReader();
        SAXSource src = new SAXSource(xr,new InputSource("test.xml"));
        Test t = JAXB.unmarshal(src,Test.class);
        System.out.println(t.include);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读