2017-11-21 6 views
0

XStreamを使用してXMLファイルをjava/groovyオブジェクトにデシリアライズします。 XMLファイルにはENTITYが定義されています。だから私はStaxDriverを使ってエンティティを自動的に解決しました。しかし、StaxDriver/XStreamは部分的な内容を無視/削除します。デシリアライズ後XStream/StaxDriverを使用してオブジェクトに定義されたENTITYを使用してXMLを逆シリアル化する

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
 
<!DOCTYPE parent [ 
 
<!ENTITY File_file SYSTEM "File_file.xml"> 
 
]> 
 

 
<parent> 
 
\t <name>NAME</name> 
 
\t <description>DSCRIPTION</description> 
 
\t <context> 
 
\t  <files> 
 
&File_file; 
 
</files> 
 
\t </context> 
 
</parent>

と再びXMLとして印刷:

<?xml version="1.0" encoding="UTF-8"?> 
 
<parent> 
 
\t <name>NAME</name> 
 
\t <description>DSCRIPTION</description> 
 
    <context> 
 
     <files> 
 
<file> 
 
    <name>name</name> 
 
    <path>location path</path> 
 
</file> 
 
     </files> 
 
    </context> 
 
</parent>

が、私は以下を参照:期待されている

<?xml version="1.0" encoding="UTF-8"?> 
 
<parent> 
 
\t <name>NAME</name> 
 
\t <description>DSCRIPTION</description> 
 
    <context> 
 
     <files> 
 
<file> 
 
</file> 
 
     </files> 
 
    </context> 
 
</parent>

コード/ロジックは、XMLコンテンツをデシリアライズします。 File.classは、形質転換のために)(XStreamの別名で呼ばれるよう

public class Parser { 

public static void main(String[] args) { 
    if (args.length != 1) { 
     System.out.println("Usage:Parser <Input File>"); 
     return; 
    } 
    XStream xstream = new XStream(new StaxDriver()); 
    xstream.alias("parent", Parent.class); 
    xstream.alias("context", Context.class); 
    xstream.alias("files", Files.class); 
    xstream.addImplicitCollection(Files.class, "files"); 
    xstream.alias("files", File.class); 
    String xml = Util.getFileText(args[0]);//file.text; 
    System.out.println(xml); 
    Parent te = (Parent)xstream.fromXML(xml); 
    System.out.println(XmlUtil.serialize(xstream.toXML(te))); 
} 

}

答えて

0

問題が確認されました。ローカルのcom.app.model.File.classを使用する代わりに、parser/xstreamがタグを変換しない原因となったjava.io.File.classが使用され、最終的にはそれが削除されます。

関連する問題