【发布时间】:2017-11-21 22:40:57
【问题描述】:
我想使用 XStream 将 XML 文件反序列化为 java/groovy 对象。 XML 文件已定义实体。所以我使用 StaxDriver 来自动解析实体。但 StaxDriver/XStream 忽略/删除部分内容。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE parent [
<!ENTITY File_file SYSTEM "File_file.xml">
]>
<parent>
<name>NAME</name>
<description>DSCRIPTION</description>
<context>
<files>
&File_file;
</files>
</context>
</parent>
反序列化并再次打印为 XML 后:预期为:
<?xml version="1.0" encoding="UTF-8"?>
<parent>
<name>NAME</name>
<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>
<name>NAME</name>
<description>DSCRIPTION</description>
<context>
<files>
<file>
</file>
</files>
</context>
</parent>
反序列化 xml 内容的代码/逻辑。
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)));
}
}
【问题讨论】: