【发布时间】: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