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)));
}
}