我使用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段),
如果元素没有任何内容,则架构处理器为元素提供的值等于默认属性的值。
为什么默认属性已填充但不是空元素?我应该如何填写默认值?
答案 0 :(得分:1)
XSD用于验证。它验证XML的结构和数据,让你知道XML是否符合预期,或者它与Schema中定义的不同。
不是要修改XML数据。
您正在寻找的是XSLT。 XSLT用于将XML转换为具有自定义层次结构和数据的XML(或HTML / Text)。
或者您也可以使用主机代码(如.Net C#或Java)中的DOM概念来修改源XML。
或者另一种方法是将XML视为字符串并使用字符串操作技术。 但不推荐使用此方法