Изменение невыбранных веток в xslt - PullRequest
0 голосов
/ 15 февраля 2011

Я хочу изменить узел в ветви в зависимости от его родного брата.В следующем примере я хочу добавить <var2 Value='D'/> к уже существующему <nest2>, если nest1 содержит <var1 Value='A'>.

Ввод:

<variables>
  <nest1>
    <var1 Value='A'/>
    <var1 Value='B'/>
  </nest1>
  <nest2>
    <var2 Value='C'/>
  </nest2>
</variables>

Вывод

<variables>
  <nest1>
    <var1 Value='A'/>
    <var1 Value='B'/>
  </nest1>
  <nest2>
    <var2 Value='C'/>
    <var2 Value='D'/>
  </nest2>
</variables>

Я могу сопоставить <var1 Value='A'/>, но я не знаю, как изменить ранее существовавший <nest2>.Я могу сопоставить <nest2>, но я не знаю, как проверить, существует ли <var1 Value='A'/> в <nest1>.Я просто в тупик, куда мне идти.

Я использую xslt 1.0.

1 Ответ

2 голосов
/ 15 февраля 2011

Вот пример таблицы стилей, которая должна выполнять эту работу:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="nest2[preceding-sibling::nest1/var1[@Value = 'A']]">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
      <var2 Value="D"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
...