在xml验证中跳过选择标记的方法

时间:2011-06-02 09:48:53

标签: xml xsd

我有以下XSD:

  <xs:element name="Parameter" type="complex">
  </xs:element>
  <xs:complexType name="complex">   
    <xs:choice>
      <xs:element name="MyData" type="myData"/>
      <xs:element name="String" type="xs:string"/>
    </xs:choice>
    <xs:attribute name="Name" use="required" type="xs:string"/>   
  </xs:complexType>
  <xs:complexType name="myData">     
     <xs:attribute name="X" use="required" type="xs:integer"/> 
     <xs:attribute name="Y" use="required" type="xs:integer"/> 
  </xs:complexType>

当我验证这个

<Parameter Name="P"><MyData X="1" Y="2"></MyData></Parameter>

一切都很好,但是当我尝试验证时:

        <Parameter Name="P">5r5r5r5r</Parameter>

它说“元素'参数'不能包含文本。期望的可能元素列表:'MyData,String'。”有没有办法跳过<Sring></String>围绕“5r5r5r5r “?

2 个答案:

答案 0 :(得分:0)

你真的想要什么? 如果你想在参数标签内写,你应该这样定义:

<xs:element name="Parameter" type="xs:string"></xs:element>

答案 1 :(得分:0)

所以看起来你想要一个可以包含其他元素或文本的<Parameter>元素。这可以通过在mixed="true"<xs:complexType>元素上设置属性<xs:complexContent>来允许混合内容来实现。

以下示例代码。

<xs:element name="Parameter">
  <xs:complexType mixed="true">
    <xs:sequence>
      <xs:element name="MyData" type="MyData"/>
    </xs:sequence>
    <xs:attribute name="Name" use="required" type="xs:string"/>
  </xs:complexType>
<xs:element name="Parameter">

注意:混合类型允许元素任何这些可能的内容选择

  • 仅文字
  • 仅元素
  • 文本和元素都可以显示文本
      元素之前的
    • 元素之后
    • 在元素之间
    • 或上述任何组合。

You have three所有问题都围绕同一主题展开。如果这些答案没有真正解决您的问题,那么我要求您指定您真正想要实现的所有要求。

  • 是否允许该元素同时包含文本元素和子元素?
  • 文本内容是否需要限制为某种格式?
  • 可能的子元素可以是任何元素还是仅限于某些已知元素?
  • 您是否需要能够验证子元素,如果它们可以是任何元素?
相关问题