XSLT Точный путь

#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;