2013-05-15 32 views
1

我有一個XML結構,如:XSL重寫直XML結構嵌套的XML

<TOP>top</TOP>
<HDR>header</HDR>
<LINE>line1</LINE>
<LINE>line2</LINE>
<LINE>line3</LINE>
<HDR>header</HDR>
<LINE>line4</LINE>
<LINE>line5</LINE>
<LINE>line6</LINE>

而且我希望有一個XLST腳本將其傳送到:

<TOP>top</TOP>
<HDR>
header
<LINE>line1</LINE>
<LINE>line2</LINE>
<LINE>line3</LINE>
</HDR>
<HDR>
header
<LINE>line4</LINE>
<LINE>line5</LINE>
<LINE>line6</LINE>
</HDR>

因此:本<HDR> -tag 周圍的行,直到下一個<HDR> -tag

有人可以幫助我,請給我一個xslt腳本。

+0

有一些類似的問題(與答案)例如[Kayessian方法](http://stackoverflow.com/a/3836240/2115381)或http://stackoverflow.com/questions/16188341/create-an-hierarchical-xml-form-an-flat-xml-a-像書,描述 –

回答

1

這種變換:

<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="kFollowing" match="LINE" 
      use="generate-id(preceding-sibling::HDR[1])"/> 

<xsl:template match="/*"> 
    <xsl:copy-of select="TOP"/> 
    <xsl:apply-templates select="HDR"/> 
</xsl:template> 

<xsl:template match="HDR"> 
    <HDR> 
    <xsl:copy-of select="key('kFollowing', generate-id())"/> 
    </HDR> 
</xsl:template> 
</xsl:stylesheet> 

當在下面的XML文檔(所提供的片段,包裹成一個單一的頂部元件)施加:

<t> 
    <TOP>top</TOP> 
    <HDR>header</HDR> 
    <LINE>line1</LINE> 
    <LINE>line2</LINE> 
    <LINE>line3</LINE> 
    <HDR>header</HDR> 
    <LINE>line4</LINE> 
    <LINE>line5</LINE> 
    <LINE>line6</LINE> 
</t> 

產生想要的,正確的結果:

<TOP>top</TOP> 
<HDR> 
    <LINE>line1</LINE> 
    <LINE>line2</LINE> 
    <LINE>line3</LINE> 
</HDR> 
<HDR> 
    <LINE>line4</LINE> 
    <LINE>line5</LINE> 
    <LINE>line6</LINE> 
</HDR>