javax.xml.validation.Validator有一个方法来根据模式验证和增强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在result中缺失时,它并不存在于xml中。
我在哪里偏离轨道了?
编辑:
好的,找到了原因为什么sub1不见了。但是,我如何确保sub1存在于result中,即使它不是xml的呢?
发布于 2012-08-15 06:20:51
此回答引用规范:增强将默认值应用于空元素。它不添加xml中不存在的元素。
换句话说,模式增强不能保证元素的存在。
https://stackoverflow.com/questions/9891034
复制相似问题