2017-01-30 5 views
-1

У меня есть данные ниже XMLXSL, чтобы добавить значение атрибута на основе значения элемента

<RESULT> 
    <ROW> 
    <TAGA>1</TAGA> 
    <TAGB>01-01-2001</TAGB> 
    </ROW> 
    <ROW> 
    <TAGA>2</TAGA> 
    <TAGB></TAGB> 
    </ROW> 
</RESULT> 

Выход Необходимого

<RESULT> 
    <ROW> 
    <TAGA TAGB_DATE="TRUE">1</TAGA> 
    <TAGB>01-01-2001</TAGB> 
    </ROW> 
    <ROW> 
    <TAGA TAGB_DATE="FALSE">2</TAGA> 
    <TAGB></TAGB> 
    </ROW> 
</RESULT> 

Я упростил и затемненные реальную проблему и данные, с тем чтобы Сделай это проще.

Как написать XSLT? Мне удалось получить атрибут TAGB_DATE в дате TAGA со значением. Но это значение не меняется для двух разных записей. Я попытался использовать select ... который работает. Но для каждой части - это то, с чем я борюсь.

Я новичок в мире XSLT.

ответ

0

Начните с identity transform, добавьте шаблон, чтобы соответствовать TAGA, выход TAGA с новым атрибутом, а затем тест TAGB, чтобы увидеть, если он имеет какой-либо другой текст, что пробелы.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="TAGA"> 
    <xsl:copy> 
     <xsl:attribute name="TAGB_DATE"> 
     <xsl:choose> 
      <xsl:when test="normalize-space(../TAGB)">TRUE</xsl:when> 
      <xsl:otherwise>FALSE</xsl:otherwise> 
     </xsl:choose> 
     </xsl:attribute> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Hi Daniel. Спасибо за ответ. Оно работает. И мне даже не нужно было для каждого. Я думаю, что основы нужно пересмотреть. –

+1

Я думаю, я понимаю, что прислал мне эту кроличью нору «для каждого». Я получал одно значение для TAGB, поскольку использовал/RESULT/ROW/TAGB. Используя ./TAGB (который, как я полагаю, указывает на элемент TAGB в текущей записи, разрешил его для меня. Надеюсь, это поможет другому нубу, который придет посмотреть. –

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