使用XStream / StaxDriver

时间:2017-11-21 22:40:57

标签: java xml xstream stax

我想使用XStream将XML文件反序列化为java / groovy对象。 XML文件已定义ENTITY。所以我使用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)));
}

}

1 个答案:

答案 0 :(得分:0)

问题被识别为XStream别名()中引用的File.class用于转换。使用java.io.File.class而不是使用本地com.app.model.File.class,导致解析器/ xstream不转换标记,最终将其删除。

相关问题