创建与没有属性且没有子代的任何元素匹配的XSD

时间:2019-04-05 15:48:13

标签: c# xml xsd .net-4.6

我需要创建一个XSD文件来安全处理我们得到的XML。 XML将如下所示:

<Books>
  <Book>
    <abc>hello</abc>
    <xyz>crazy</xyz>
    <q123>world</q123>
    ...
  </Book>
  <Book>
    <abc>bye</abc>
    <xyz>bye</xyz>
    <q123></q123>
    ...
  </Book>
</Books>
  • <Books>元素是根元素,因此只有一个。
  • <Book>元素介于1到100之间。

问题出在<Book>元素的子元素上。

  • 出现的次数必须在1到500之间。
  • 子元素可以是任何名称。
  • 名称长度必须为1到100个字符。
  • 它们可以按任何顺序排列。
  • 子元素不能具有任何属性。
  • 子元素的值可以是0到100个字符的长度。

好消息是,每个<Book>元素将具有相同数量和相同顺序的子元素。以下是我到目前为止的XSD。这基于XSD for varying element names

的答案
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">
  <xs:element name="Books">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Book" minOccurs="0" maxOccurs="1000">
          <xs:complexType>
            <xs:sequence>
              <xs:any processContents="strict" namespace="##local" minOccurs="0" maxOccurs="500"/>
            </xs:sequence>
            <xs:assert test="every $e in * satisfies matches(local-name($e), '.{1,100}')"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

当我尝试解析XML时,出现此错误:The 'http://www.w3.org/2001/XMLSchema:assert' element is not supported in this context.

我不确定为什么会收到该错误。另外我也不知道如何测试子元素的值在0到100个字符之间,以及如何确保它具有0个属性。

我正在使用C#.NET 4.6。预先感谢!

0 个答案:

没有答案