【问题标题】:Augment XML with XML Schema使用 XML Schema 增强 XML
【发布时间】:2012-03-27 13:57:31
【问题描述】:

javax.xml.validation.Validator 有一个method 来根据模式验证和扩充 xml。

简化的 xml:

<something>
  <sub1>false</sub1> <!-- Suppose sub1 is optional and may not be present in xml -->
  <sub2>false</sub2>
</something>

简化xsd:

<complexType name="something">
  <sequence>
    <element name="sub1" type="boolean" maxOccurs="1" minOccurs="0" default="false"/>
    <element name="sub2" type="boolean" maxOccurs="1" minOccurs="1"/>
  </sequence>
</complexType>

简化的验证和扩充代码:

Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(new File(xmlFile));
DOMSource input = new DOMSource(document);
DOMResult output = new DOMResult();
validator.validate(input, output);

Document result = (Document)output.getNode();

因此,除了根据架构验证 xml 之外,它还应该对其进行扩充并添加任何缺失的默认值(如 sub1)并将其发送到 output

但是,sub1 在 xml 中缺失时,result 中不存在。

我在哪里偏离了轨道?

编辑:

好的,找到了reason 为什么缺少sub1。但是我如何确保sub1 存在于result 中,即使它不在xml 中?

【问题讨论】:

  • 如果它是可选的并且它不存在,那么为什么需要添加节点?
  • 它应该是一个 config.xml 并且每当 xml 中缺少元素时,增强的 Document 应该只使用 xsd 中的默认值,因此代码不必为默认值而烦恼。

标签: java xml xsd validation


【解决方案1】:

answer 引用了规范:扩充将默认值应用于空元素。它不会添加 xml 中不存在的元素。

换句话说,通过模式进行扩充并不能保证元素存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2014-08-02
    • 2016-02-03
    • 2019-07-22
    • 2013-04-27
    • 2016-08-15
    • 2017-04-23
    相关资源
    最近更新 更多