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 のようになります。区切り文字は ~ です。

その値を分割して、別の行に入れたいと思います。だから私はそれが好きであることを望みます

test123

テスト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

条件文のリストはあなたのために働くはずです

<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 に答える
0

XSLT 2.0 の tokenize 関数を使用して値を部分に分割するか、XSLT 1.0 を使用する際の自分自身の質問の 1 つに対する Martin Honnen による非常に良い回答を使用してください: How can make XSLT Javascript extension function return a node-set? .

于 2012-04-30T07:23:33.680 に答える