2016-09-14 68 views
0

我已經編寫了一個XSL代碼,用於從任何xml文件中刪除沒有任何屬性的空元素。如果空元素有一個屬性,我不想刪除該元素。 例如:<ABC xyz="true"/>這是一個空的元素,但有屬性,所以我不會刪除這個元素。 但是,只針對特定元素MNO, 例如:<ABC><MNO def="hello"></ABC>,我想刪除此元素的MNO。請幫助XSL轉換 - 刪除特定元素的空元素

XSL代碼如下共享:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" > 
<xsl:strip-space elements="*"/> 
<xsl:output method="xml" indent="yes" encoding="UTF-8"/> 
    <xsl:template match="node() | @*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node() | @* "/> 
    </xsl:copy> 
</xsl:template> 
    <xsl:template match="*[not(.//@*) and not(normalize-space())]" /> 
    <xsl:template match="*/text()[not(normalize-space())]" /> 
</xsl:stylesheet> 
+0

我能夠刪除所有沒有屬性的空元素。如上所述,我無法移除要移除的移動網絡運營商 – jsanjayce

+0

您能澄清您的需求嗎?在這個問題中,你說你「不想刪除這個元素MNO」,但是在你的評論中你說你確實想刪除它。此外,它會只是一個特定的元素,你想(或不想)刪除,或這樣的元素列表?謝謝! –

+0

感謝@TimC的澄清。雅我想要只刪除特定元素MNO是空的,但有屬性。我不想刪除具有此類屬性的任何其他元素(MNO除外) – jsanjayce

回答

1

如果我理解正確的話,你只需要這個其他模板添加到您的XSLT

<xsl:template match="MNO[not(normalize-space())]" priority="2" /> 

需要的priority,因爲它被認爲是一種錯誤使兩個模板匹配具有相同優先級的同一事物。

+0

感謝TimC!幫了很多 – jsanjayce