我有以下代码。
<xsl:template match="Rel/SPFMarkupFile">
<xsl:for-each select="./SPFReportItem">
<tr>
<td>X</td>
<td><xsl:value-of select='../../../SPFReportItem/ReportAttribute[@AttrName="Name"]/@AttrValue' /></td>
<td colspan="4" indent="yes">
<xsl:value-of select='ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue' />
</td>
<td><xsl:value-of select='ReportAttribute[@AttrName="CreationUser"]/@AttrValue' /></td>
<td colspan="2">N/A</td>
<td><xsl:value-of select='ReportAttribute[@AttrName="SPFMarkupType"]/@AttrValue' /></td>
</tr>
</xsl:for-each>
<xsl:value-of select='ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue' />
例如,值可以是test123~test2~test4~test1 分隔符是〜
我想拆分该值并将其放入不同的行。所以我希望它像
test123
TEST2
test4
TEST1
对于其他列,它将是相同的值。
我怎样才能做到这一点?
答案 0 :(得分:2)
例如,值可以是test123~test2~test4~test1的分隔符 是〜
我想将该值拆分并将其放入不同的行中。
使用强>:
translate(., '~', '
')
对此XPath表达式的求值从当前节点的字符串值生成另一个字符串,其中~
字符的每个出现都被NL(换行)字符替换。
<强>演示强>:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:value-of select="translate(., '~', '
')"/>
</xsl:template>
</xsl:stylesheet>
对此XML文档应用此转换时:
<t>test123~test2~test4~test1 </t>
产生了想要的正确结果:
test123
test2
test4
test1
<强> II。 XSLT 2.0解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:value-of select="tokenize(., '~')" separator="
"/>
</xsl:template>
</xsl:stylesheet>
当应用于同一XML文档(上图)时,会生成所需的正确结果:
test123
test2
test4
test1
答案 1 :(得分:0)
条件语句列表应该适合你
<xsl:if test="'ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue'='Test123'">
</xsl:if>
<xsl:if test="'ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue'='Test1'">
</xsl:if>
<xsl:if test="'ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue'='Test2'">
</xsl:if>
<xsl:if test="'ReportAttribute[@AttrName="SPFMarkupText"]/@AttrValue'='Test3'">
</xsl:if>
答案 2 :(得分:0)
使用XSLT 2.0中的tokenize函数将值拆分为多个部分,或者在使用XSLT 1.0时使用Martin Honnen的一个非常好的答案:How can make an XSLT Javascript extension function return a node-set?。