Xml 有条件地拾取相同的元素,但具有不同的属性列表
假设我有以下xml:Xml 有条件地拾取相同的元素,但具有不同的属性列表,xml,xsd,Xml,Xsd,假设我有以下xml: <root> <node attr1="1" /> <node attr1="1" attr2="2"/> <node attr1="1" attr3="3"/> </root> 除根节点外,所有节点都需要atrr1,但其他属性可以组成一个组合。仅允许以下组合: 1.attr1本身 2.属性1,属性2 3.属性1,属性3 attr2和attr3不能在组合中同时显示 <?xml v
<root>
<node attr1="1" />
<node attr1="1" attr2="2"/>
<node attr1="1" attr3="3"/>
</root>
除根节点外,所有节点都需要atrr1,但其他属性可以组成一个组合。仅允许以下组合:
1.attr1本身
2.属性1,属性2
3.属性1,属性3
attr2和attr3不能在组合中同时显示
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="node">
<xs:complexType>
<xs:attribute name="attr1" type="xs:int" use="required" />
<xs:attribute name="attr2" type="xs:int" use="optional" />
<xs:attribute name="attr3" type="xs:int" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我一直在尝试使用xsd来尝试并有条件地评估属性的组合,但这几乎是不可能的,因为我无法将xsd文件中的多个元素命名为节点。有没有办法解决这个问题,或者甚至有条件地检查属性组合?如果没有,是否有人看到解决方案?您只能告诉它attr1是必需的,而attr2和attr3是可选的。我知道,在XSD模式(对于XML1.0)中定义attr2和attr3是不可能的。 你必须有一些东西在事后验证它,以检查该组合
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="node">
<xs:complexType>
<xs:attribute name="attr1" type="xs:int" use="required" />
<xs:attribute name="attr2" type="xs:int" use="optional" />
<xs:attribute name="attr3" type="xs:int" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
编辑:
我遇到了另一个线程,其中有人想要一些类似于您的复杂验证,并且在其中一篇评论中提供了一个链接,这篇文章讨论了您所追求的是什么,并且是针对XML版本1.1实现的。我也读了这篇详细的文章。不幸的是,XML 1.1似乎没有得到广泛支持。我已经编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。哦,好的。是的,我认为在基本的xml验证之后,我将自己设计属性组合。谢谢