как получить данные последней строки из этого XML с помощью xslt - PullRequest
3 голосов
/ 19 ноября 2011

пытаясь получить последний из тега, если данные последней строки равны личным средствам, тогда нужно заполнить как 1100, если бы данные были представлены, что они должны быть заполнены вот мой ниже xml:

    <tag>
    <name>20K</name>
    <value>540211000000100155001
    0100155XXXXXX
    0100156XXXXX
    0100157XXXXXXX
    0100159XXXXXXXX
    personal</value>
</tag>

Как использовать логику в xslt, может ли кто-нибудь мне помочь

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

I.Вот краткий и простой способ сделать это в XSLT 2.0 :

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

 <xsl:template match="/*/value">
     "<xsl:sequence select="tokenize(., '(&#xD;)?&#xA;')[last()]"/>"
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

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

<tag>
    <name>20K</name>
    <value>540211000000100155001
    0100155XXXXXX
    0100156XXXXX
    0100157XXXXXXX
    0100159XXXXXXXX
    personal</value>
</tag>

желаемый, правильный результат получается :

"    personal"

II.Решение XSLT 1.0

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

 <xsl:template match="value" name="skipLines">
   <xsl:param name="pText" select="."/>
     <xsl:choose>
      <xsl:when test="not(contains($pText, '&#xA;'))">
        "<xsl:value-of select="$pText"/>"
      </xsl:when>
      <xsl:otherwise>
       <xsl:call-template name="skipLines">
         <xsl:with-param name="pText" select=
             "substring-after($pText, '&#xA;')"/>
       </xsl:call-template>
      </xsl:otherwise>
     </xsl:choose>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

, когда это преобразование применяется к тому же документу XML (см. Выше), снова получается тот же правильный результат :

"    personal"
0 голосов
/ 19 ноября 2011
<xsl:for-each select="//tag">
  <xsl:if test="contains(value/text(),"personal")">
    do stuff ...
  </xsl:if>
</xsl:for-each>
just for inspiration :)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...