如何使用xslt从此xml中获取最后一行数据

时间:2011-11-19 11:47:41

标签: xslt

如果最后一行的数据等于个人意味着试图从标签中获取最后一个然后需要填充为1100其他数据表明它应该填充 这是我的下面的xml:

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

如何在xslt中使用逻辑可以任何人指导我

2 个答案:

答案 0 :(得分:1)

<强>予。以下是在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"

答案 1 :(得分:-2)

<xsl:for-each select="//tag">
  <xsl:if test="contains(value/text(),"personal")">
    do stuff ...
  </xsl:if>
</xsl:for-each>
just for inspiration :)