XSLT foreach - PullRequest
       15

XSLT foreach

0 голосов
/ 18 марта 2009

Привет, у меня странная проблема с соответствием определенному атрибуту узла xml. Пример кода, который не работает:

<xsl:for-each select="../../unit/service/price/season[@name=$period_name]">
     <xsl:attribute name="std_bed_price">
          <xsl:value-of select="../@amount"/>
     </xsl:attribute>
</xsl:for-each>

Пример кода, который работает, но мне не очень нравится этот способ:

 <xsl:for-each select="../../unit/service/price/season">
     <xsl:if test="@name = $period_name">
          <xsl:attribute name="std_bed_price">
               <xsl:value-of select="../@amount"/>
          </xsl:attribute>
     </xsl:if>
 </xsl:for-each>

Если в первом примере я заменил имя переменной некоторыми значениями, такими как «А», это работает, я также проверил, какое имя переменной выбрано, и оно содержит правильные данные внутри (так, «A», «B», «C» ...)

Кто-нибудь имел эту проблему раньше?

Tnx

Ответы [ 2 ]

3 голосов
/ 19 марта 2009

Вы можете попробовать изменить его на apply-шаблоны вместо foreach. Должно работать что-то вроде следующего.

<xsl:template match="price">
    <xsl:attribute name="std_bed_price">
        <xsl:value-of select="@amount" />
    </xsl:attribute>
</xsl:template>

А затем назовите это как:

<xsl:apply-template select="../../unit/service/price/[season/@name=$period_name]" />
0 голосов
/ 18 марта 2009

Не видел этого раньше. Это может быть неоднозначный атрибут @name. Поэтому попробуйте получить доступ к нему, как показано ниже?

select="../../unit/service/price/season[./@name=$period_name]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...