對你想達到什麼做出一些假設(你沒有說得那麼清楚,我很害怕),下面的解決方案應該可以工作。
輸入
<a>
<b>
<aaa>val</aaa>
<bbb></bbb>
</b>
</a>
樣式表是非常動態的,即不依賴於實際的元素名稱,但是它依賴於XML文檔的結構。
樣式表(「動態」)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*|/*/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*/*[not(text())]"/>
<xsl:template match="/*/*/*[text()]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
在另一方面,如果該元素的名稱是事先知道的和不改變,你可以在樣式表中使用它們:
樣式表( 「靜態」 的元素名稱)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/a|b">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="aaa|bbb">
<xsl:choose>
<xsl:when test="text()">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
輸出
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b>
<aaa>val</aaa>
</b>
</a>
一個元素名稱不能以數字開頭,參見例如:http://stackoverflow.com/questions/2087108/encoding -xml-element-name-beginning-with-a-number –
確定這是例子,我將它編輯爲字符 –
XSLT樣式表通常將一個XML轉換爲另一個XML。請編輯您的問題並顯示您的輸入XML和您期望的輸出XML。 –