объединить несколько узлов с тем же идентификатором в один, но добавить все дети - PullRequest
1 голос
/ 13 сентября 2011

было бы любезно, если бы кто-нибудь мог помочь мне с этим фрагментом xmlt.

Я хочу преобразовать этот кусок XML:

<root>
  <rowdata>
    <ID>1</ID>
    <pxPages>
      <rowdata>
        <comment>comment 1</comment>
      </rowdata>
    </pxPages>
  </rowdata>
  <rowdata>
    <ID>2</ID>
    <pxPages>
      <rowdata>
        <comment>comment 2</comment>
      </rowdata>
    </pxPages>
  </rowdata>
  <rowdata>
    <ID>2</ID>
    <pxPages>
      <rowdata>
        <comment>comment 3</comment>
      </rowdata>
    </pxPages>
  </rowdata>
</root>

в

 <root>
<ResultOperationalStatusCategory>
    <identifier>1</identifier>
    <comment>comment 1</comment>
</ResultOperationalStatusCategory>
<ResultOperationalStatusCategory>
    <identifier>2</identifier>
    <comment>comment 2</comment>
    <comment>comment 3</comment>
</ResultOperationalStatusCategory>

СПАСИБО!

1 Ответ

0 голосов
/ 13 сентября 2011
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:key name="k" match="rowdata" use="ID"/>

  <xsl:template match="/root">
    <xsl:copy>
      <xsl:apply-templates select="rowdata[generate-id(.) = 
                           generate-id(key('k', ID))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="rowdata">
    <ResultOperationalStatusCategory>
      <identifier>
        <xsl:value-of select="ID"/>
      </identifier>
      <xsl:copy-of select="key('k', ID)//comment"/>
    </ResultOperationalStatusCategory>   
  </xsl:template>

</xsl:stylesheet>

Выход:

<root>
  <ResultOperationalStatusCategory>
    <identifier>1</identifier>
    <comment>comment 1</comment>
  </ResultOperationalStatusCategory>
  <ResultOperationalStatusCategory>
    <identifier>2</identifier>
    <comment>comment 2</comment>
    <comment>comment 3</comment>
  </ResultOperationalStatusCategory>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...