[英]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.