У меня есть требование создать файл 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 для переменных имен элементов
<?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.Заранее спасибо!