2013-12-23 3 views
0

Я обрабатываю XML, который имеет несколько разных тегов. Я сопоставляю тег и копирую значение тега в новый тег. У меня есть только одна проблема с этим xslt. Что делать, если информация о значении не существует в теге, который я обрабатываю? Я всегда получаю пустой текстовый тег после преобразования xslt. Можно ли это как-то избежать, поэтому, если в XML-теге не существует тега информации, будут удалены и новые текстовые теги? Надеюсь, я понял, в чем моя проблема. Спасибо за любые предложения.XSLT узел преобразования и переименования

Мой XSLT:

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

<xsl:template match="test"> 
    <text> 
     <xsl:apply-templates select="info/text()"/> 
    </text> 
</xsl:template> 

ответ

0

Вы можете включить требование в атрибуте шаблона match: просто добавить тестирование предикат на наличие текстового узла.

test[info/text()] 

Приведенное выше выражение XPath будет соответствовать только если test элемент имеет дочерний элемент с именем info с непустых текстовых узлов в ней.

В противном случае вы также можете использовать элемент xsl:if и проверить наличие текстового узла.

<xsl:if test="info/text()"> 
    <text> 
     <xsl:apply-templates select="info/text()"/> 
    </text> 
</xsl> 
1

Создать дополнительный шаблон для обработки info элементов:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="test"> 
     <xsl:apply-templates select="info"/> 
    </xsl:template> 
    <xsl:template match="info"> 
     <text> 
      <xsl:apply-templates select="."/> 
     </text> 
    </xsl:template> 
</xsl:stylesheet> 

Например, на этом простом входе:

<r> 
    <test> 
     <info>blah</info> 
    </test> 
    <test></test> 
</r> 

Следующий вывод производится:

<r> 
    <text>blah</text> 
</r> 

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

Смежные вопросы