Если я правильно прочитал, то, что вы пытаетесь сделать, не так просто. Между документом XML и схемой нет «волшебной» связи, вам придется загрузить схему в таблицу стилей и найти в ней документацию.
Предполагая, что в определенный момент ваша таблица стилей XSLT находится в положении, где typewoning
находится под элементом контекста (т.е. value-of select="typewoning"
будет выводить его значение), вы можете сделать это:
<xsl:variable name="schema" select="document('my-schema.xsd')/xsd:schema"/>
<xsl:variable name="type" select="$schema//xsd:simpleType[@name = 'TypeWoningEnum']"/>
<xsl:variable name="value" select="$type//xsd:enumeration[@value = typewoning]//xsd:documentation"/>
<xsl:value-of select="$value"/>
Некоторые объяснения:
- Первый шаг загружает схему в переменную с помощью функции документа XSL
- На втором шаге будет найден правильный тип (вы, вероятно, можете придумать и найти тип, используя тип элемента в документе, но тогда потребуется проверка схемы, и вам потребуется механизм XSLT, совместимый со схемой)
- Третий шаг находит значение документации для вывода, учитывая содержимое вашего элемента
typewoning
.
Четвертый шаг записывает результат, используйте по своему усмотрению.
Редактировать: альтернатива, если вы хотите использовать XSLT-механизм, совместимый со схемой, такой как платная версия saxon . Предполагая, что все ваши перечисления происходят от integer
, вы можете попробовать это в контексте некоторого родительского узла:
<xsl:variable name="schema" select="document('my-schema.xsd')/xsd:schema"/>
<xsl:for-each select="element(*, xsd:integer)">
<xsl:variable name="type" select="$schema//xsd:simpleType[@name = local-name(current())]"/>
<xsl:if test="$type">
<xsl:variable name="value" select="$type//xsd:enumeration[@value = current()/text()]//xsd:documentation"/>
<xsl:text>Value: </xsl:text> <xsl:value-of select="$value"/>
</xsl:if>
</xsl:for-each>