0

输入:

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

2 回答 2

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 标签的分隔内容,因此应用模板应包含 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>
于 2013-06-27T19:22:03.247 回答
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>
于 2013-06-26T08:31:00.447 回答