XSLT: если Node = A, тогда установите B = 1, иначе B = 2 - PullRequest
2 голосов
/ 19 марта 2010

Я проверяю значения узла.

If Node = B, then B has one of two possible meanings. 
  --If Node = A has been previously found in the file, then the value for A
    should be sent as 1.
  --If Node = A has NOT been found in the file, the the value for A should 
    be sent as 2.

where file is the xml source to be transformed

Я не могу понять, как это сделать. Если бы я использовал язык программирования, который позволял переменной переназначать / изменять ее значение, то это легко. Но с помощью XSLT переменные устанавливаются один раз.

Ответы [ 2 ]

10 голосов
/ 19 марта 2010

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

Вот очень известный способ делать то, что, я думаю, в смысле вашего вопроса:

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

 <xsl:template match="/">
   <xsl:variable name="vA">
     <xsl:choose>
      <xsl:when test="//B">1</xsl:when>
      <xsl:otherwise>2</xsl:otherwise>
     </xsl:choose>
   </xsl:variable>

   $vA = <xsl:value-of select="$vA"/>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к следующему документу XML :

<c>
  <d/>
</c>

результат :

   $vA = 2

При применении к этому документу :

<c>
  <d>
   <B/>
  </d>
</c>

результат равен :

   $vA = 1

Есть более короткий способ получить тот же результат :

  <xsl:variable name="vA" select="not(//B) +1"/>
0 голосов
/ 19 марта 2010

Посмотрите на xsl: выбирать, xsl: когда, xsl: если. Вы можете сделать

<xsl:if test="A=1">
Set in here
</xsl:if>

<xsl:choose>
    <xsl:when test="A=1">
        <xsl:otherwise>
</xsl:choose>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...