代码之家  ›  专栏  ›  技术社区  ›  mackenir

如何在XML模式中指定名称为但不包含任何内容的子元素?

  •  2
  • mackenir  · 技术社区  · 15 年前

    我正试图编写一些XML模式代码来指定特定元素“abc”可能具有名为“xyz”的子元素,并且该元素可能具有任何属性和任何子元素。

    现在我有了这个:

        <xs:element name="abc">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="xyz">
                <xs:complexType>
                  <xs:sequence>
                    <xs:any/>
                  </xs:sequence>
                  <xs:anyAttribute/>               
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
    

    但是,当我根据模式验证XML时,我得到的验证失败抱怨XYZ元素的子元素。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Audie    15 年前

    您的xs:any没有附加任何信息,因此它正在寻找模式定义的元素。如果您希望在解释子元素时松懈,请尝试以下操作:

    <xs:element name="abc">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="xyz">
            <xs:complexType>
              <xs:sequence>
                <xs:any processContents="lax" />
              </xs:sequence>
              <xs:anyAttribute/>               
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    这将使您通过验证。如果你有 任何 期望XYZ内容的格式良好,您可以使用xs:any的namespace属性包含一个命名空间,并为该信息拉入另一个模式。

    祝你好运,希望这对你有所帮助!