如果最后一行的数据等于个人意味着试图从标签中获取最后一个然后需要填充为1100其他数据表明它应该填充 这是我的下面的xml:
<tag>
<name>20K</name>
<value>540211000000100155001
0100155XXXXXX
0100156XXXXX
0100157XXXXXXX
0100159XXXXXXXX
personal</value>
</tag>
如何在xslt中使用逻辑可以任何人指导我
答案 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(., '(
)?
')[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, '
'))">
"<xsl:value-of select="$pText"/>"
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="skipLines">
<xsl:with-param name="pText" select=
"substring-after($pText, '
')"/>
</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 :)