2

我有以下代码。

<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 分隔符是 ~

我想拆分该值并将其放入不同的行中。所以我希望它像

测试123

测试2

测试4

测试1

对于其他列,它将是相同的值。

我怎样才能做到这一点?

4

3 回答 3

2

例如值可以是 test123~test2~test4~test1 分隔符是 ~

我想拆分该值并将其放入不同的行中。

使用

translate(., '~', '&#xA;')

这个 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(., '~', '&#xA;')"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于此 XML 文档时:

<t>test123~test2~test4~test1 </t>

产生了想要的正确结果:

test123
test2
test4
test1 

二、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="&#xA;"/>
 </xsl:template>
</xsl:stylesheet>

当应用于同一个 XML 文档(上图)时,会产生所需的正确结果:

test123
test2
test4
test1 
于 2012-04-30T12:48:42.793 回答
0

在 XSLT 2.0 中使用 tokenize 函数将值拆分为多个部分,或者使用 Martin Honnen 对我在使用 XSLT 1.0 时的一个问题的非常好的回答:如何使 XSLT Javascript 扩展函数返回节点集?.

于 2012-04-30T07:23:33.680 回答
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>
于 2012-04-30T03:14:06.457 回答