xml 元素,未知名称但知道它不是复杂类型

xml element, unkown name but known it's no complextype

所以我正在尝试验证如下所示的 xml:

<module name="example" alias="ex1">
<params>
    <p1>1</p1>
    <pcomplex>
        <p>2</p>
    </pcomplex>
    <foo>2</foo>
    <bar>3</bar>
    .....
    <pn>this is the n'th element</pn>
</params>

pcomplex 块应该抛出一个错误,因为我不想让任何 complexTye 进入参数序列

我已经用这个 xsd:

试过了
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="module">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="params" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:any processContents="lax" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute type="xs:string" name="name" use="required"/>
      <xs:attribute type="xs:string" name="alias" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

但是我尝试做的事情失败了。

如有任何帮助,我们将不胜感激。

这不能在 XSD 1.0 中完成。然而,XSD 1.1 可以很轻松地处理这种情况。以下是一种可能的方法:@test 正在检查具有嵌套元素的元素。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:element name="module">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="params">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>                            
                        </xsd:sequence>
                        <xsd:assert test="not(*[*|@*])"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="alias" type="xsd:string" use="required"/>
            <xsd:attribute name="name" type="xsd:string" use="required"/>
        </xsd:complexType>
    </xsd:element>  
</xsd:schema>

如果您想允许具有简单内容的复杂类型(即不允许嵌套元素、属性),那么只需将测试更改为 not(*[*])

一个无效的 XML 可能会产生这个(基于上面的架构):

cvc-assertion.3.13.4.1: Assertion evaluation ('not(*[*|@*])') for element 'params' with type '#anonymous' did not succeed.