如何使用XSD的默认值填充空xml元素(通过验证)?

时间:2014-03-12 10:31:48

标签: xml xsd

我使用javax.xml.validation.Validator.validate(StreamSource, StreamResult),这是我的xml和xsd:

xsd:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string" default="nobody"/>
    </xs:sequence>
  <xs:attribute name="color" type="xs:string" default="red" />
  </xs:complexType>
</xs:element>
</xs:schema>


XML:

<note>
  <to>you</to>
  <from></from>
</note>


但是我从 StreamResult 得到的是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<note color="red">
  <to>you</to>
  </from>
</note>


根据{{​​3}}(参见 2.2.1发生限制的第4段),

  

如果元素没有任何内容,则架构处理器为元素提供的值等于默认属性的值。

为什么默认属性已填充但不是空元素?我应该如何填写默认值?

1 个答案:

答案 0 :(得分:1)

XSD用于验证。它验证XML的结构和数据,让你知道XML是否符合预期,或者它与Schema中定义的不同。

不是要修改XML数据。

参考this [click_here]

您正在寻找的是XSLT。 XSLT用于将XML转换为具有自定义层次结构和数据的XML(或HTML / Text)。

或者您也可以使用主机代码(如.Net C#或Java)中的DOM概念来修改源XML。

或者另一种方法是将XML视为字符串并使用字符串操作技术。 但不推荐使用此方法