получите xpath от xsl переменной

Шаг math() был только введен в 3.3.1, поэтому если вы используете 3.2.10, это не сработает. Возможно, попробуйте 3.3.5 и посмотрите, работает ли math() там.

5
задан Schwartser 14 January 2009 в 16:44
поделиться

3 ответа

Одно решение, для которого не нужен xxx:node-набор () расширение, следующее:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <!--                                           -->
    <xsl:variable name ="myVar">
        <RefData RefTag="test1" bbb="false" />
        <RefData RefTag="test2" bbb="false" />
        <RefData RefTag="test3" bbb="false" />
        <RefData RefTag="test4" bbb="true"  />
        <RefData RefTag="test5" bbb="false" />
        <RefData RefTag="test6" bbb="false" />
    </xsl:variable>
 <!--                                           -->
    <xsl:variable name="vrefVar" select=
     "document('')/*/xsl:variable[@name='myVar']"
     />
 <!--                                           -->
    <xsl:template match="/">
      <xsl:value-of select="$vrefVar/*[@RefTag='test3']/@bbb"/>
    </xsl:template>
</xsl:stylesheet>

Когда вышеупомянутое преобразование применяется на любой XML-документ (не используемый), к требуемому результату приводят:

false

Действительно отметьте использование XSLT document() функционируйте для доступа к необходимому <xsl:variable> просто как элемент в xml документе.

8
ответ дан 14 December 2019 в 04:49
поделиться
<xsl:variable name="myVariable" select="msxsl:node-set($myVar)"/>

Можно избежать msxsl пространства имен движущимся переменным содержанием к источнику xml.

1
ответ дан 14 December 2019 в 04:49
поделиться

Принятие этого XML:

<test1>
  <RefData RefTag="test1"/>
  <RefData RefTag="test2"/>
  <RefData RefTag="test3"/>
  <RefData RefTag="test4"/>
  <RefData RefTag="test5"/>
  <RefData RefTag="test6"/>
</test1>

Что-то вроде этого могло работать:

<xsl:template match="/">
  <xsl:apply-templates select="test1/RefData"/>
</xsl:template>

  <xsl:template match="RefData">
    <xsl:variable name="myVar">
      <xsl:choose>
        <xsl:when test="@RefTag = 'test1'">false</xsl:when>
        <xsl:when test="@RefTag = 'test2'">false</xsl:when>
        <xsl:when test="@RefTag = 'test3'">false</xsl:when>
        <xsl:when test="@RefTag = 'test4'">true</xsl:when>
        <xsl:when test="@RefTag = 'test5'">false</xsl:when>
        <xsl:when test="@RefTag = 'test6'">false</xsl:when>
        <xsl:otherwise>true</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <!--<text x="{$myVar}"/>-->
  </xsl:template>
-1
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: