Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 有条件地拾取相同的元素,但具有不同的属性列表_Xml_Xsd - Fatal编程技术网

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

假设我有以下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 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验证之后,我将自己设计属性组合。谢谢