XSD:如何根据某个标记的值验证XML文件?

XSD:如何根据某个标记的值验证XML文件?,xml,schema,xsd,Xml,Schema,Xsd,我正在尝试验证此XML文件。。。 如果 为“Y”,则必须出现 如果为“N”,则不得出现 <parent> <a> <tag1>Y</tag1> <tag2>sometext</tag2> </a> <a> <tag1>N</tag1> </a> </parent> Y 一些文字 N 我尝试了标记,但似乎不起作

我正在尝试验证此XML文件。。。 如果

  • 为“Y”,则必须出现

  • 如果
    为“N”,则
    不得出现

    <parent>
      <a>
        <tag1>Y</tag1>
        <tag2>sometext</tag2>
      </a>
      <a>
        <tag1>N</tag1>
      </a>
    </parent>
    
    
    Y
    一些文字
    N
    
  • 我尝试了
    标记,但似乎不起作用..:(我得出的结论是,XSD中没有此功能。)


    您能至少指导我一些替代方案来实现这一点吗?顺便说一下,我正在使用Visual Studio 2005..

    您无法用XSD验证类似的东西

    XML架构不是设计的,也不是用于检查“标记内”关系,例如“如果tag1的值为“Y”,则必须存在tag2”-抱歉,这是无法完成的


    如果需要检查此类条件,则必须查看以执行此操作。

    不幸的是,使用XSD无法解决此问题。原因是XSD只能用于定义XML文件的结构(语法)。您要做的是将语法与某些语义属性相耦合(某些标记必须有特定的内容,才能决定附近某些标记的语法)。

    这是一个已知的事实,这是一个XML模式的简单映射。但我希望您尝试
    标记的方法。如果您的条件是这样的话,它可能会成功:

  • 如果
    是必需的,并首先显示,则不需要
    (并显示为第二个标记)
  • 如果
    是必需的,并且首先显示,则不需要
    (并且显示为第二个)
  • 代码是:

    <xs:element name="parent">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="a" maxOccurs="unbounded">
            <xs:complexType>
              <xs:choice>
                <xs:sequence>
                  <xs:element name="tag1" type="xs:boolean" />
                  <xs:element name="tag2" type="xs:string" minOccurs="0" />
                </xs:sequence>
                <xs:sequence>
                  <xs:element name="tag2" type="xs:string" />
                  <xs:element name="tag1" type="xs:boolean" minOccurs="0" />
                </xs:sequence>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    
    
    
    使用XSD是不可能的。但是顺便说一句,如果像她的示例中所示的需求有点满足,您可以解决类似婴儿程序员的问题。

    您使用什么XML解析器进行验证?我对它知之甚少。.我必须使用visual studio 2005。)我对schematron略知一二。听起来很有趣。但为它开发的工具不多。甚至visual studio也不支持它。。。