2013-06-26 3 views
0

вход:Как объединить элементы в 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. есть 5 элементов, присутствующих в этом T1.we нужно конкатенировать все элементы. Нам нужен приведенный ниже вывод. Пожалуйста, изучите это.

выход:

<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

Это следует сделать это:

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

Такая ошибка показывает, что вы новичок в XSL так же, как и я, поэтому некоторые основные объяснения не должны быть бесполезным. Я попытаюсь объяснить, почему вы не получаете то, что ожидаете.

Здесь:

<xsl:template match="text()"/> 
    <xsl:template match="/"> 

При запуске на корневой тег, вы пишете.

<T1> 

Тогда вы называете ваш шаблон

<xsl:apply-templates select="A/T1"/> 

который применяет свой XSL: стоимость из каждого тегов T1 здесь:

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