输入:
<A>
<T1>
<element1>e1</element1>
<element2>e2</element2>
<element3>e3</element3>
<element5>e5</element5>
</T1>
<T1>
<element4>e4</element4>
</T1>
<T1>
<element1>e1</element1>
<element2>e2</element2>
<element3>e3</element3>
<element5>e5</element5>
</T1>
<T1>
<element1>e1</element1>
<element2>e2</element2>
<element3>e3</element3>
<element5>e5</element5>
</T1>
<T1>
<element4>e4</element4>
</T1>
<T1>
<element4>e4</element4>
</T1>
</A>
这里我们需要对T1元素执行循环。这个T1中有5个元素。我们需要连接所有元素。我们需要下面的输出。请看一下。
输出:
<T1>e1e2e3e4e5</T1>
<T1>e1e2e3e5</T1>
<T1>e1e2e3e4e5</T1>
<T1>e4</T1>
我尝试了下面的xslt,但它连接了所有的循环。
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="A/T1">
<xsl:value-of select='concat(element1,element2,element3,element4,element5)'/>
</xsl:template>
<xsl:template match="text()"/>
<xsl:template match="/">
<T1>
<xsl:apply-templates select="A/T1"/>
</T1>
</xsl:template>
</xsl:stylesheet>
上面的xslt给出的输出就像。
<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4</T1>
答案 0 :(得分:0)
这应该这样做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="T1">
<T1><xsl:value-of select='.'/></T1>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
这样的错误表明你像我一样对XSL不熟悉,所以一些基本的解释不应该是无用的。 我会试着解释为什么你没有得到你期望的东西。
下面:
<xsl:template match="text()"/>
<xsl:template match="/">
当您开始使用根标记时,请编写。
<T1>
然后你打电话给你的模板
<xsl:apply-templates select="A/T1"/>
在此处应用每个T1标签的xsl:value-of:
<xsl:template match="A/T1">
<xsl:value-of select='concat(element1,element2,element3,element4,element5)'/>
</xsl:template>
然后你的结果
<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4
你终于关闭了你的标签:
</T1>
所以你的结果是:
<T1>e1e2e3e5e4e1e2e3e5e1e2e3e5e4e4</T1>.
您想要的是获取T1标签的分隔内容,因此apply-templates应包含T1标签定义
就像:
<xsl:template match="A/T1">
<T1>
<xsl:value-of select='concat(element1,element2,element3,element4,element5)'/>
</T1>
</xsl:template>
然后您不再需要在模板根目录中添加T1:
<xsl:template match="/">
<xsl:apply-templates select="A/T1"/>
</xsl:template>