#xml #xslt
#xml #xslt
Вопрос:
Я пишу синтаксический анализатор xml в json с помощью XSLT.
Вот мой xml:
lt;Itemgt; lt;ChildItemsgt; lt;Itemgt; lt;Idgt;child-1lt;/Idgt; lt;/Itemgt; lt;Itemgt; lt;Idgt;child-2lt;/Idgt; lt;/Itemgt; lt;/ChildItemsgt; lt;Idgt;main-1lt;/Idgt; lt;/Itemgt;
Я пытаюсь получить идентификатор основного элемента(main-1), но я получаю идентификатор первого дочернего элемента (child-1).
lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="custom:v1:interop" version="1.0"gt; ... "Id": "lt;xsl:value-of select="//custom:Item/custom:Id" /gt;" ...
Я не могу изменить XML, поэтому, пожалуйста, не предлагайте это в качестве решения.
Спасибо.
Комментарии:
1. Почему бы вам не опубликовать полный пример, который позволил бы нам воспроизвести вашу проблему (включая XML, соответствующий XSLT с точки зрения пространств имен). Самое главное: где вы находитесь (в каком контексте), когда вы это называете.
Ответ №1:
Предполагая, что вы разместили полный XML-файл, где внешний Item
является корневым элементом, тогда в пути /Item/Id
будет выбран Id
дочерний элемент Item
корневого элемента.
Ответ №2:
Я последовал вашему XSL-коду и написал абсолютный XPATH для идентификатора и относительный XPATH, начиная с пункта. Я использую ваше пользовательское пространство имен, предполагая, что оно вам нужно.
lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:custom="custom:v1:interop" gt; lt;xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/gt; lt;xsl:variable name="myId" select="custom:Item/custom:Id"/gt; lt;xsl:template match="custom:Item"gt; lt;rootgt; using relative XPATH: lt;xsl:value-of select="custom:Id"/gt; using absolute XPATH: lt;xsl:value-of select="$myId"/gt; lt;/rootgt; lt;/xsl:templategt; lt;/xsl:stylesheetgt;