java - 在 java 中使用 xstream 解析 xml (android studio)

标签 java android xml-parsing xstream

出了点问题,应用程序崩溃了。我正在尝试将 xml 文本解析为 java 类,我正在使用 XStream 库。使用方法 fromXML 后代码崩溃。我的代码:

XML 文件如下所示:

<FilesManifest>
<Group>
    <HeaderName>Pirmas hdr</HeaderName>
    <Type>theory</Type>
    <Piece>
        <FileName>11.txt</FileName>
        <HeadLine>hi1</HeadLine>
    </Piece>
    <Piece>
        <FileName>22.txt</FileName>
        <HeadLine>hi2</HeadLine>
    </Piece>
</Group>

<Group>
    <HeaderName>antras hdr</HeaderName>
    <Type>theory</Type>
    <Piece>
        <FileName>33.txt</FileName>
        <HeadLine>hi3</HeadLine>
    </Piece>
    <Piece>
        <FileName>44.txt</FileName>
        <HeadLine>hi4</HeadLine>
    </Piece>
</Group>

<Group>
    <HeaderName>tracias hdr</HeaderName>
    <Type>test</Type>
    <Piece>
        <FileName>55.txt</FileName>
        <HeadLine>hi5</HeadLine>
    </Piece>
    <Piece>
        <FileName>66.txt</FileName>
        <HeadLine>hi6</HeadLine>
    </Piece>
</Group>
</FilesManifest>

我的主要功能代码:

String fileText = ReadFile();
XStream xstream = new XStream();

xstream.alias("FilesManifest", MyFileManager.class);
xstream.alias("Group", MyGroup.class);
xstream.alias("Piece", MyPiece.class);

MyFileManager data = (MyFileManager)xstream.fromXML(fileText);

以及用于xml解析的类:

public class MyFileManager {
    public List<MyGroup> getGroups() {
        return groups;
    }

    public void setGroups(List<MyGroup> groups) {
        this.groups = groups;
    }
    @XStreamImplicit(itemFieldName = "group")
    private List<MyGroup> groups = new ArrayList<MyGroup>();
}

public class MyGroup {
    private String headerName;
    private String type;

    @XStreamImplicit(itemFieldName = "piece")
    private List<MyPiece> pieces = new ArrayList<MyPiece>();

    public List<MyPiece> getPieces() {
        return pieces;
    }

    public void setPieces(List<MyPiece> pieces) {
        this.pieces = pieces;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getHeaderName() {
        return headerName;
    }

    public void setHeaderName(String headerName) {
        this.headerName = headerName;
    }

}

public class MyPiece {
    private String fileName;
    private String headLine;

    public String getHeadLine() {
        return headLine;
    }

    public void setHeadLine(String headLine) {
        this.headLine = headLine;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}

那么你能告诉我代码可以正常工作吗?也许还有其他解析方式?

最佳答案

我可以通过解决 2 个主要问题使您的代码正常工作:

  1. 您的映射不完整且不正确,因为您似乎忘记了 XML区分大小写,这意味着例如 @XStreamImplicit(itemFieldName = "group ") 应该是 @XStreamImplicit(itemFieldName = "Group") 并且所有字段都必须用 @XStreamAlias 注释以提供别名,其中的第一个字符资本。
  2. 你没有调用processAnnotations(Class type)这样您的注释就不会被处理。

所以最后你的代码应该是这样的:

您的 POJO:

public class MyFileManager {
    ...
    @XStreamImplicit(itemFieldName = "Group")
    private List<MyGroup> groups = new ArrayList<>();
}

public class MyGroup {
    @XStreamAlias("HeaderName")
    private String headerName;
    @XStreamAlias("Type")
    private String type;

    @XStreamImplicit(itemFieldName = "Piece")
    private List<MyPiece> pieces = new ArrayList<>();

    ...
}

public class MyPiece {
    @XStreamAlias("FileName")
    private String fileName;
    @XStreamAlias("HeadLine")
    private String headLine;

    ...
}

你的主要功能代码:

...
// Process the provided annotations
xstream.processAnnotations(MyFileManager.class);
MyFileManager data = (MyFileManager)xstream.fromXML(fileText);

关于java - 在 java 中使用 xstream 解析 xml (android studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41641280/

相关文章:

java - JPA CascadeType.PERSIST 是如何工作的?

java - Thymeleaf:通过错误代码显示全局错误

java - 无法从另一个类将记录插入 SQLite 数据库

ruby - 如果我的 XML 文档指令指定 UTF-8 编码,我还需要转义字符吗?

C# : The best solution to parse the xml file?

java - 在Java中设置Oracle 10g数据库连接超时

java - 在java中使用一个类

java - SimpleDateFormat:无法解析的日期异常

Android 应用单实例

java - 在 JAVA 中解析大型 XML 文档