如何检测所需的XML属性?

时间:2011-05-13 08:45:58

标签: java xml xsd xml-parsing

我有一个没有定义属性的XML内容,如下所示:

<rootElement>
   <subElement1/>
</rootElement>

我希望使用XML Schema(XSD)中为此XML定义的必需属性填充此XML内容。

例如,根据XSD,subElement1具有必需属性'id'。

检测并将这些属性添加到XML的最佳方法(用于Java处理)是什么? 我们需要添加必需的属性并为它们设置适当的值。

上面的例子我们需要有以下XML:

<rootElement>
   <subElement1 id="some-value"/>
</rootElement>

4 个答案:

答案 0 :(得分:3)

我建议您使用JAXB。在互联网上搜索教程。

继续使用JAXB,

的步骤
  1. 通过提供架构
  2. 使用JAXB生成Java文件
  3. 将XML解组为生成的Java类(bean)。不要在此处进行验证或设置验证处理程序。
  4. 使用适当的值填充这些类。可以使用注释查找找到required个元素。元素的JAXB注释看起来像@XmlElement(name = "ElementName", required = true)。属性注释与此类似,@XmlAttribute(required = true)
  5. 将您的bean备份回XML。您可以使用ValidationHandler验证您的bean,同时编组。以下是示例代码段

    marshller = JAXBContext.newInstance(pkgOrClassName).createUnmarshaller();
    marshller.setSchema(getSchema(xsd)); // skip this line for unmarshaller
    marshller.setEventHandler(new ValidationHandler()); // skip this line for unmarshaller
    

答案 1 :(得分:3)

在XML架构定义(即XSD文件)中,默认情况下属性是可选的。要创建所需的属性,您必须定义:

<xs:attribute name="surname" type="xs:string" use="required"/>

您将在W3 Schools上找到关于XML和XML架构定义(即XSD)的非常好的介绍。

在Java中,定义XML模式的等效方法是使用JAXB,即包含在Java SE中的Java API for XML Binding。你可以在那里定义,例如

@XmlRootElement
public class Person { public @XmlAttribute(required=true) String surname; }

希望这可以澄清你的问题。

答案 2 :(得分:0)

使用DOM解析器。有遍历XML树,访问,插入和删除节点的方法

答案 3 :(得分:0)

我对Cris有同样的想法,但我认为使用此验证器,您没有关于您遇到错误的信息。 我认为您必须创建或扩展自己的验证器。