XML验证 - 已知和未知属性可选吗?

时间:2015-07-04 09:43:34

标签: java xml validation xsd

请告诉我是否可能,如果可能的话。如何在xsd中声明我的xml中的所有属性都是可选的。我无法声明所有属性,因为我的xml具有不同数量的属性,包括已知和未知。

        schema = factory.newSchema(new StreamSource(xsdFileInputStream));
        Validator validator = schema.newValidator();
        validator.validate(new StreamSource(new StringReader(xmlString)));

感谢。

3 个答案:

答案 0 :(得分:1)

我找到了解决方案!

<xs:anyAttribute processContents="skip"/>

答案 1 :(得分:0)

如果您可以修改XSD中的每个元素,那么它就像这样简单:

<xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="unbounded" />

这是你可以将属性声明为可选的方法:

<xs:attribute name="lang" type="xs:string" use="optional"/>

不确定我是否正确的最终要求,你想自动神奇地做到这一点。 没有全局标志可以实现这一点,但你可以创建这样的脚本:

  • 用Java打开XSD文件
  • 逐行阅读
  • 如果您检测到<xs:sequence>,请启用修改算法
  • 查找给定行中元素或属性的声明
  • 如果有元素,则附加到它的发生规则
  • 默认情况下属性是可选的,因此如果它们包含&#34; required&#34;,则将其更改为可选
  • 当您找到</xs:sequence>时,请关闭修改算法
  • 重复直到不再有行

注意:对String执行此操作,一旦解析完成,它将替换文件的内容。

答案 2 :(得分:0)

XSD 1.1允许你说

<xs:schema defaultAttributes="defaultAttGroup"...

<xs:attributeGroup name="defaultAttGroup">
  <xs:anyAttribute processContents="skip"/>
</xs:attributeGroup>

相当于为每个复杂类型添加属性通配符。