【问题标题】:How to parse XML tag by Javax.xml library如何通过 Javax.xml 库解析 XML 标签
【发布时间】:2019-05-28 11:33:09
【问题描述】:

我正在尝试解析一个简单的 XML 文件,如下所示:

<customer id="100">
    <age value=" 29"/>
    <name value="Bob"/>
</customer>

我是这样使用JAX的库的:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

    @XmlAttribute(name = "id")
    String id;
    @XmlAttribute(name = "value")
    String value;
    String name;
    String age;

    public String getName() {
        return name;
    }

    @XmlElement(name = "value")
    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    @XmlElement(name = "value")
    public void setAge(String age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    @XmlElement(name = "id")
    public void setId(String id) {
        this.id = id;
    }
}

有一个 IllegalAnnotationExceptions。 我已通过此链接过期:here 但没有成功。

【问题讨论】:

  • agename 不是 XML 中的属性。它们是子节点。如果您的 XML 类似于 &lt;customer id="100" age="29" name="Bob"&gt;...,那将会有所不同。那么agename 将是您的customer 节点的直接属性。
  • 我的 XML 文件无法更改,抱歉。该示例从此处提取:mkyong.com/java/jaxb-hello-world-example 但在我的情况下报告 xml

标签: java xml parsing tags


【解决方案1】:

由于“name”和“age”值实际上是子节点的属性,你应该将它提取到单独的类中,有点:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class Customer {

    @XmlAttribute
    String id;

    @XmlElement
    NameAgeValue name;

    @XmlElement
    NameAgeValue age;

    public String getId() {
        return id;
    }

    public String getAge() {
        return (age == null) ? null : age.value;
    }

    public String getName() {
        return (name == null) ? null : name.value;
    }
}

@XmlType
public static class NameAgeValue {

    @XmlAttribute
    String value;
}

【讨论】:

  • 顺便说一句,我只有id=100,但是名字和年龄都是空的(" ")
  • 我确实通过您的 XML 示例测试了我的代码。已解析对象的getAgegetName 返回预期结果。
  • 小心 NameAgeValue 类应该放到 Customer 类的主括号中并且 Customer 类没有 static ;)
  • @OutOfMemoryError 这是来自测试类的 sn-p,因此 Customer 也是静态内部
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多