2015-10-25 3 views
0

Я пытаюсь придумать XSLT преобразования шаблон, который может объединить подэлементы подбираются их элементов текста (который может быть что угодно)XSLT - объединение Подэлементы соответствие их элементов текста

Пример входных данных XML

<test> 
    <name>Alpha</name> 
    <value>11</value> 
</test> 
<test> 
    <name>Beta</name> 
    <value>14</value> 
</test> 
<test> 
    <name>Alpha</name> 
    <value>22</value> 
</test> 

Я хотел бы преобразовать, чтобы объединить подэлементы с соответствующими элементами, поэтому любые подэлементы с именем Alpha будут сгруппированы в выход.

Пример результата XML

<test> 
    <name>Alpha</name> 
    <valuelist>11,22</valuelist> 
</test> 
<test> 
    <name>Beta</name> 
    <valuelist>14</valuelist> 
<test> 

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

+0

Это (типичная) проблема группировки. Можете ли вы использовать процессор XSLT 2.0, например Saxon 9? –

ответ

0

Использование XSLT 2.0:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:output indent="yes"/> 

    <xsl:template match="root"> 
     <xsl:copy> 
      <xsl:for-each-group select="test" group-by="name"> 
       <test> 
        <xsl:copy-of select="name"/> 
        <valuelist> 
         <xsl:value-of select="current-group()/value" separator=","/> 
        </valuelist> 
       </test> 
      </xsl:for-each-group> 
     </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

Интернет образца на http://xsltransform.net/ej9EGbV.

Смежные вопросы