2012-04-18 13 views
3

xmlを解析するためにJAXBを使用しています。私は以下のようなスキーマと、このスキーマで定義された2つのxmlファイルa.xmlとb.xmlを持っています。 a.xmlには、xi:include xmlタグに依存する依存関係があります。今xmlの解析中に問題が発生しました。xi:contains with jaxb

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

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より明確なデータここで

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> 

ある2つのXMLファイルについては、以下の例を提出してください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); 

構文解析に成功しましたが、詳細 JAXBタグオブジェクトはnullです。とにかく、a.xmlファイルのxi:includeタグはフラット化されません。何か案が?

+0

何ドメインモデルがどのように見えるのでしょうか? –

+0

Blaise、申し訳ありませんが、私はあなたを取得しませんでした。 wahtはドメインモデルですか? –

+0

はい、あなたがマップしようとしているものが不思議です。 –

答えて

1

あなたは

spf.setNamespaceAware(true); 
3

はこれを試してみてください追加shoud、それは間違いなく動作します:

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); 
    } 
} 
関連する問題