2015-12-17 9 views
2

Я использую XSLT 1.0 в своем проекте. В моем преобразовании XSLT я должен проверить определенный элемент, и если это существует - мне нужно выполнить некоторую конкатенацию или другую операцию конкатенации.Доступность контрольного узла XSLT в

Однако, я не нахожу здесь вариант, как встроенная функция.

Требование походит

<Root> 
    <a></a> 
    <b></b> 
    <c></c> 
</Root> 

Вот элемент <a>, приходят в запрос полезной нагрузки, то необходимо выполнить конкатенацию <b> и <c> еще <c> и <b>.

+1

http://stackoverflow.com/help/someone-answers –

+0

kumarb, в случае, если вы не поняли этот намек: Пожалуйста, примите один из ответов ниже, прежде чем задавать новые вопросы. –

ответ

3

Вы можете сделать это с помощью сопоставления шаблона:

<xsl:template match="Root[not(a)]"> 
    <xsl:value-of select="concat(c, b)"/> 
</xsl:template> 

<xsl:template match="Root[a]"> 
    <xsl:value-of select="concat(b, c)"/> 
</xsl:template> 
+0

Хороший ответ, +1. –

1

Попробуйте вдоль этих линий:

<xsl:template match="/Root"> 
    <xsl:choose> 
     <xsl:when test="a"> 
      <!-- do something --> 
     </xsl:when> 
     <xsl:otherwise> 
      <!-- do something else --> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

Объяснение: тест возвращает логическое значение набора узлов, выбранных выражение a. Если набор узлов не пуст, результат будет истинным.

1

Тест на наличие элемента, используя xsl:choose

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:template match="/Root"> 
     <xsl:choose> 
      <xsl:when test="a"> 
       <xsl:value-of select="concat(c, b)"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="concat(b, c)"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

Или в предикате для шаблона совпадений:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:template match="/Root[a]"> 
     <xsl:value-of select="concat(c, b)"/> 
    </xsl:template> 

    <xsl:template match="/Root[not(a)]"> 
     <xsl:value-of select="concat(b, c)"/> 
    </xsl:template> 

</xsl:stylesheet> 
0

В вашем случае, используйте choose и тест на наличие a использования boolean() на соответствующем xpath.

<xsl:template match="Root"> 
    <xsl:choose> 
    <xsl:when test="boolean(./a)"> 
     <xsl:value-of select="concat(./b, ./c)" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="concat(./c, ./b)" /> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template>