xslt: есть ли способ сослаться на корневой узел? - PullRequest
0 голосов
/ 01 октября 2018

Есть ли способ получить доступ к узлу ROOT из другого контекста?

Приведенный выше пример просто показывает мое намерение.Получение доступа к ROOT_NODE без использования «../../ ..», поскольку изменения в xml могут сломать этот тип селектора.

XSLT

<div class="column">
  <xsl:for-each select="languages/server/elem">
    <!-- Context is ELEM node -->
    <div>
      <!-- How can I get access to the ROOT_NODE ?-->
      <span class="text"><xsl:value-of select="ROOT_NODE/@title"/></span>
      <!-- Print ELEM text -->
      <span class="text"><xsl:value-of select="current()"/></span>
    </div>
  </xsl:for-each>
</div>

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Выражение «/» выбирает узел документа в корне дерева, содержащего узел контекста.(Все деревья в 1.0 имеют корни в узлах документа.)

В XSLT 2.0 root() выбирает корень дерева, содержащего узел контекста, независимо от того, является ли корень узлом документа.

Чтобы получить корень основного исходного документа, даже если узел контекста является узлом в другом дереве, свяжите глобальную переменную

<xsl:variable name="principal-root" select="/"/>

, к которой вы можете обратиться в любом месте как $principal-root.

О, и как указывает Мадс Хансен, если под "корневым узлом" вы на самом деле имеете в виду самый внешний элементный элемент, в отличие от узла документа, то вы обычно используете "/*".

0 голосов
/ 01 октября 2018

Корневой узел является корнем дерева XML и является пробелом над элементом документа.Поскольку документ XML также может содержать комментарии и инструкции по обработке в качестве узлов верхнего уровня, он также позволяет выбирать их.

http://www.w3.org/TR/1999/REC-xpath-19991116/#location-paths

/ выбирает документroot (который всегда является родителем элемента документа)

Звучит так, как будто вы хотите сослаться на «корневой элемент», также известный как «элемент документа» ,так что вы можете получить значение @title.

. Вы можете выбрать его с помощью следующего XPath:

/*/@title
...