簡體   English   中英

使用XSLT刪除和復制XML元素

[英]Removing and copying XML elements with XSLT

使用XSLT,我想轉換具有以下結構的XML文件:

<e1>
  <e2 a="a1" b="b1" c="c1">
    <e3 foo="a"/>
    <e3 foo="b"/>
    <e3 foo="c"/>
    ...
  </e2>
  <e2 a="a2" b="b2" c="c2">
    <e3 foo="d"/>
    ...
  </e2>
  ...
</e1>

進入:

<e1>
  <e2 a="a1" b="b1" c="c1">
    <e3 a="a1" b="b1" e="e"/>
  </e2>
  <e2 a="a2" b="b2" c="c2">
    <e3 a="a2" b="b2" e="e"/>
  </e2>
  ...
</e1>

換句話說:我需要完全刪除e3元素,並用封閉的e2元素的副本替換它們,並將其名稱更改為e3; 將某些屬性(例如a,b)復制到新元素,並添加一些新屬性(例如e)。

其他任何東西都必須完好無損。

先感謝您。

也許這可以為您工作:

XSLT 1.0

<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="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="e2[e3]">   
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
        <e3 a="{@a}" b="{@b}" e="e"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="e3"/>

</xsl:stylesheet>

它刪除所有現有的e3元素,並且-對於任何包含至少一個e3子元素的e2元素-添加新的e3元素,從父e2復制@a@b屬性,並添加新的@e屬性。 其他所有內容均照原樣復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM