2017-11-21 2 views
0

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

}

Antwort

0

Ausgabe identifiziert wurde als File.class in XStream alias bezeichnet() für die Transformation. Anstatt local com.app.model.File.class zu verwenden, wurde java.io.File.class verwendet, was dazu führte, dass der Parser/xstream die Tags nicht umwandelte, und entfernte sie schließlich.

Verwandte Themen