Использование XSD для проверки количества узлов - PullRequest
3 голосов
/ 14 апреля 2010

Я не думаю, что это возможно, но я решил выбросить это туда. Учитывая этот XML:

 <people count="3">
      <person>Bill</person>
      <person>Joe</person>
      <person>Susan</person>
 </people>

Возможно ли в XSD заставить значение атрибута @count быть правильным числом определенных элементов (в данном случае, элемента person)? Приведенный выше пример, очевидно, будет правильным, а приведенный ниже пример не будет проверен:

 <people count="5">
      <person>Bill</person>
      <person>Joe</person>
      <person>Susan</person>
 </people>

Ответы [ 2 ]

4 голосов
/ 14 апреля 2010

Я почти уверен, что XSD не может этого сделать. Однако, если вы хотите гарантировать, что ваш атрибут count соответствует реальному количеству элементов ниже, запуск таблицы стилей XSLT в документе может гарантировать, что это правда, установив значение:

<xsl:template match="people">
   <xsl:attribute name="count">
      <xsl:value-of select="count(person)"/>
   </xsl:attibute>
   <xsl:apply-templates/>
</xsl:template>

<!-- insert your identity template here -->
0 голосов
/ 10 июля 2010

Парсеры, реализующие спецификацию XSD 1.1, должны предоставлять функцию assert, которую можно использовать для проверки содержимого XML по количеству дочерних узлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...