2016-12-05 12 views
0

XMLのENTITY属性を使用して外部サブファイルをロードしたかったのです。私はそれを以下の手順で行った。DOMでXMLを解析すると、!ENTITY参照が削除される

<!DOCTYPE doc [ 
<!ENTITY A SYSTEM "C:///XML//A.xml"> 
<!ENTITY B SYSTEM "C://XML//B.xml"> 
<!ENTITY C SYSTEM "C://CONFIGURATION//XML//C.xml"> 
]> 

<list idPrefix="N" seqIdLength="5"> 
    &A; 

</list> 

はその後、XMLに、私は&を使用してこれらのエントリを参照しています。そしてXMLはA.xmlに行き、このファイルから各xml要素を読み込みます。しかし、私はjavaからこのメインのXMLを変更したい場合、私はproblem.FirstすべてのDOCTYPEが削除されています。 DOCTYPEを消去すると、以下の形式でxmlを変更しました。

<!DOCTYPE doc SYSTEM "C://XML//test.dtd"> 

私はtest.dtdに次の行をコピーしました。

<!ENTITY A SYSTEM "C:///XML//A.xml"> 
<!ENTITY B SYSTEM "C://XML//B.xml"> 
<!ENTITY C SYSTEM "C://CONFIGURATION//XML//C.xml"> 

XMLを保存すると、Now DOCTYPEは削除されません。しかし私には別の問題があります。 &の代わりに、Aファイルの内容がmain xmlに挿入され、ENTITYパスへの参照が挿入されます。

 <list idPrefix="N" seqIdLength="5"> 
    <alist name = "1" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "2" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "3" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "4" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "5" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "6" xml:base="file:///C://XML//A.xml"/> 
    <alist name = "7" xml:base="file:///C://XML//A.xml"/> 

</list> 

これでENTITYの機能が失われました。私はmain xmlにすべてのデータを持っています。これに対する解決策はありますか?

答えて

0

私はParsing xml with DOM, DOCTYPE gets erased

DOMImplementationLS domImplementationLS = 
(DOMImplementationLS) dom.getImplementation().getFeature("LS","3.0"); 
LSOutput lsOutput = domImplementationLS.createLSOutput(); 
FileOutputStream outputStream = new FileOutputStream("output.xml"); 
lsOutput.setByteStream((OutputStream) outputStream); 
LSSerializer lsSerializer = domImplementationLS.createLSSerializer(); 
lsSerializer.write(dom, lsOutput); 
outputStream.close(); 

次のリンクに語った。しかし、私は、サブファイルの値を変更することはできません同じアプローチを使用していました。私はこれが論理的であるかどうかはわかりません。

関連する問題