【问题标题】:How to find a missing attributes in xml in java如何在java中找到xml中缺少的属性
【发布时间】:2015-04-15 16:10:03
【问题描述】:

我有一个包含某些属性的 XML 文件。而且我有实现类来解析文件以获取值。但是当我用缺失值进行测试时,它工作正常。我的程序想在运行时抛出错误或警告。请给我一个解决方案。

示例“hello.xml”

<head>
<welcome>Hi</welcome>
<id>1</id>
<uname>chill</uname>
<persons>
<person>
<name>1</name>
<age>23</age>
<city>huils</city>
</person>
<person>
<name>2</name>
<age>23</age>
<city>huils</city>
</person>
<person>
<name>3</name>

</person>
</persons>
</head>

现在在第 3 个人中,我缺少属性和标签年龄和城市。但是我的程序可以正常工作而不会引发错误。怎么了。

实施方案:

@XmlElementWrapper(name="welcome")
    public void setwelcome(String welcome) {
        welcome= welcome;
    }

@XmlElement (name = "id")
    public void setid(String id) {
        id= id;
    }

    @XmlElement (name = "id")
    public void setid(String id) {
        id= id;
    }

    @XmlElement (name = "name")
    public void setname(String name) {
        name= name;
    }


    @XmlElement(name="age")
    public void setage(String age) {
        age= age;
    }

   @XmlElement(name="city")
    public void setage(String city) {
        city= city;
    }

【问题讨论】:

  • 我对@9​​87654326@ 的看法是,它不是无用的,仅用于文档范围。你可以在你的类上定义一个afterUnmarshal() method,它以编程方式验证对象的状态,如果它不喜欢它就会抛出异常。但是,如果您想要一个有效的验证,您应该考虑为您创建一个 XSD 架构 XML
  • 我的 xml 很大,如何从 xml 生成 xsd?是不是还有别的办法?
  • 您可以从 java 类 see this question 或 XML this 站点生成 XSD。另见here

标签: java xml parsing jaxb


【解决方案1】:

您必须使用required annotation property 将所需元素标记为强制元素。默认值为false,因此缺少元素不会触发错误。

@XMLElement(name=<name>, required=true)

至于属性的工作方式相同,您必须将它们标记为required

@XmlAttribute(required=true)

【讨论】:

  • @BelieveToLive 你能展示整个 JAXB 注释类以及负责解组的代码吗?
【解决方案2】:

一般来说,最好不要手动编写 JAXB java 代码,而是从 xsd 文件生成它。您还可以将 xsd 用于验证您的 xml,以防止在将其映射到 java 对象期间出现任何解析问题。如果您这样做并且您的 xml 不匹配,那么您将收到更复杂的错误消息,这有助于识别问题。

Here is how to generate JAXB java classes from xsd in Eclipse.

【讨论】:

  • 为什么手工编写 JAXB Java 代码不是一个好主意?它被设计为通过从作为便利机制提供的模式中生成的手工编写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2016-01-30
相关资源
最近更新 更多