xslt這裏的另一個新手。我有一個類似於這個問題 - Applying Muenchian grouping for a simple XML with XSLT - 但由一個額外的節點層複雜。稍微複雜一點xslt muenchian分組
我有這個XML ...
<ALLDATA>
<THIS>
<ID>datum 1</ID>
<DATA>datarecord1</DATA>
<RELATIONSHIPS>
<rel>
<relid>rd1</relid>
<reldata>something</reldata>
</rel>
</RELATIONSHIPS>
</THIS>
<THIS>
<ID>datum 1</ID>
<DATA>datarecord1</DATA>
<RELATIONSHIPS>
<rel>
<relid>rd2</relid>
<reldata>other</reldata>
</rel>
</RELATIONSHIPS>
</THIS>
<THIS>
<ID>rd1</ID>
<DATA>relrecord1</DATA>
<RELATIONSHIPS/>
</THIS>
<THIS>
<ID>rd2</ID>
<DATA>relrecord2</DATA>
<RELATIONSHIPS/>
</THIS>
</ALLDATA>
...並想將它轉換成...
<ALLDATA>
<THIS>
<ID>datum 1</ID>
<DATA>datarecord1</DATA>
<RELATIONSHIPS>
<rel>
<relid>rd1</relid>
<reldata>something</reldata>
</rel>
<rel>
<relid>rd2</relid>
<reldata>other</reldata>
</rel>
</RELATIONSHIPS>
</THIS>
<THIS>
<ID>rd1</ID>
<DATA>relrecord1</DATA>
<RELATIONSHIPS/>
</THIS>
<THIS>
<ID>rd2</ID>
<DATA>relrecord2</DATA>
<RELATIONSHIPS/>
</THIS>
</ALLDATA>
我使用XSLT(1.0)顯然是道路關閉基地所以希望有人用更多的知識(你好!)可以幫助把我的權利:)
這裏是沒用的XSLT ...
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="krel" match="THIS" use="ID"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="appex_user/node">
<xsl:copy>
<xsl:apply-templates select="THIS[generate-id() = generate-id(key('krel', ID)[1])]" mode="group"/>
</xsl:copy>
</xsl:template>
<xsl:template match="THIS/RELATIONSHIPS" mode="group">
<xsl:copy>
<xsl:copy-of select="RELATIONSHIPS/rel"/>
<xsl:apply-templates select="key('krel', ID)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
其實 - 我試過各種組合都無濟於事。
好,'匹配= 「appex_user /節點」'不匹配任何您所張貼的輸入。 –
爲了安全,不應該* DATA *也是關鍵的一部分?即使* ID *和* DATA *應該是一對一關聯的,也可能存在這樣一種情況,其中* THIS *元素具有相同的* ID *值,但具有不同的* DATA *值。然後在鍵上只運行* ID *的樣式表只會使用其中一個* DATA *元素,而其他具有不同值的其他元素將會丟失。只是說。 – xjuice
Ach .. appex_user位來自原始位置 - 我調整了我的標記,使其看起來更通用,而不是使用真正的標記。 – rosensfole