【问题标题】:Simplexml list doesn't workSimplexml 列表不起作用
【发布时间】:2014-09-19 11:24:40
【问题描述】:

我想使用SimpleXML 框架读取并解析包含员工信息的XML 文件。这是我的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
    <Employees>
        <Employee>
            <age>29</age>
            <name>Pankaj</name>
            <gender>Male</gender>
            <role>Java Developer</role>
        </Employee>
        <Employee>
            <age>35</age>
            <name>Lisa</name>
            <gender>Female</gender>
            <role>CEO</role>
        </Employee>
    </Employees>

这是雇员类:

@Root
public class Employees {

    @ElementList(inline = true)
    private List<Employee> list;

    public List<Employee> getList() {
        return list;
    }
}

这里是 Employee 类:

@Root
public class Employee {

    @Element
    private String name;

    @Element
    private String gender;

    @Element
    private int age;

    @Element
    private String role;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @Override
    public String toString() {
        return " Name=" + this.name + " Age="
                + this.age + " Gender=" + this.gender + " Role=" + this.role;
    }
}

但是当我尝试读取和解析 XML 文件时,会发生异常。这是输出:

Exception in thread "main" org.simpleframework.xml.core.ElementException: Element 'Employee' does not have a match in class Employees at line 3

【问题讨论】:

  • 您可以使用 JaxB 来读取和解析 XML。有了 JAXB,它就容易多了。你只需要编组和解组。如果您有兴趣阅读和解析 JAXB,请告诉我。我可以帮你。
  • 但是我想知道我的代码出了什么问题,我很高兴能测试任何其他框架。我想评估不同解析器中的时间和内存使用情况。所以请帮助我处理 JAXB。

标签: java xml simple-framework


【解决方案1】:

您在定义列表名称时犯了错误:

@Root
public class Employees {

    @ElementList(inline = true)
    private List<Employee> Employees; //The list name should match with xml list name."

    public List<Employee> getList() {
        return list;
    }
}

在您的 XML 中,您有一个元素类型为“Employee”的“Employees”列表。但是在您的 java 程序中,您将“Employees”列表定义为“list”:

【讨论】:

  • 我更改了它,但发生了同样的异常。
【解决方案2】:

我发现了问题。我必须使用这个:

@ElementList(inline = true, entry="Employee")

因为没有这个,框架认为元素类名是“Entry”。

【讨论】:

  • 是的,这样它也可以工作。但是对于您的第一种情况,预期的 XML 文件是不同的。这也可能会有所帮助:)
【解决方案3】:

您可以尝试为您在雇员对象中使用的列表添加类型。 但最好也添加代码你如何阅读你的 xml 文件(我现在没有足够的声誉在 cmets 中问你)

@Root
class Employees {

    @ElementList(inline = true, type = Employee.class)
    private List<Employee> list;

    public List<Employee> getList() {
        return list;
    }
}

对于问题中的第一个示例,在添加之前

@ElementList(entry = "Employee")
private List<Employee> list;

预期的 XML 文件在下面(和 @ElementList(type = Employee.class),我删除了 inline = true)

<?xml version="1.0" encoding="UTF-8"?>
    <employees>
    <list>
        <employee>
            <age>29</age>
            <name>Pankaj</name>
            <gender>Male</gender>
            <role>Java Developer</role>
        </employee>
        <employee>
            <age>35</age>
            <name>Lisa</name>
            <gender>Female</gender>
            <role>CEO</role>
        </employee>
    </list>
    </employees>

【讨论】:

  • 我更改了它,但发生了同样的异常。我使用这一行来读取 XML 文件:Employees e = persister.read(Employees.class, file);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2018-05-30
  • 1970-01-01
相关资源
最近更新 更多