Как получить доступ к вложенным элементам в инструкции if XSLT - PullRequest
1 голос
/ 17 июня 2020

Итак, мне нужно получить доступ к вложенному элементу в операторе if.

Ниже вы можете увидеть пример XML, который я использую:

<Publication>
   <PubName>Avoid the Consumer Apps - How to Collaborate Securely and Productively in the Finance Sector</PubName>
   <Attributes>
    <Attribute>
     <AttributeName>Type</AttributeName>
     <Value>Webinar</Value>
     <ValueText>Webinar</ValueText>
    </Attribute>
   </Attributes>
  </Publication>

А вот XSLT-код, который я использую, чтобы попытаться получить значение Webinar:

<xsl:for-each select="TradePub.com/PublicationTable/Publication">
<xsl:if test="Attributes/Attribute/Value='Webinar'">
    <tr>
      <td><xsl:value-of select="PubName"/></td>
      <td><xsl:value-of select="PubCode"/></td>
    </tr>
</xsl:if>
</xsl:for-each>

Но это ничего не возвращает, поэтому мне интересно, как я могу получить доступ к элементу Value?

1 Ответ

2 голосов
/ 17 июня 2020

Используйте предикат для элемента Value, например:

<xsl:for-each select="TradePub.com/PublicationTable/Publication">
    <xsl:if test="Attributes/Attribute[Value!='Webinar']">
        <tr>
        <td><xsl:value-of select="PubName"/></td>
        <td><xsl:value-of select="PubCode"/></td>
        </tr>
    </xsl:if>
</xsl:for-each>

Другая проблема, почему вы не получаете никакого вывода, заключается в том, что предложение IF в вашем примере имеет значение FALSE. Чтобы получить желаемый результат с данным образцом, используйте вместо него

<xsl:if test="Attributes/Attribute[Value='Webinar']">

. Тогда вывод будет

<tr>
  <td>Avoid the Consumer Apps - How to Collaborate Securely and Productively in the Finance Sector</td>
  <td/>    <!-- No 'PubCode' element present -->
</tr>
...