如何在XSLT中连接元素

时间:2013-06-26 06:25:28

标签: xslt

输入:

    <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>

2 个答案:

答案 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>