Ich möchte die XML-Datei mit Hilfe von XStream in Java/Groovy-Objekte deserialisieren. XML-Datei hat ENTITY definiert. Also habe ich den StaxDriver verwendet, um Entitäten automatisch aufzulösen. Aber StaxDriver/XStream ignoriert/entfernt teilweise Inhalte.Deserialisieren von XML mit definierter ENTITY zu Objekten mit XStream/StaxDriver
<?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>
Nach de-serialize und als XML-Druck wieder: Erwartete ist:
<?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>
aber ich sehe unten:
<?xml version="1.0" encoding="UTF-8"?>
<parent>
\t <name>NAME</name>
\t <description>DSCRIPTION</description>
<context>
<files>
<file>
</file>
</files>
</context>
</parent>
-Code/Logik-XML-Inhalte deserialisieren.
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)));
}
}