2013-10-03 142 views
0

有人可以解釋我如何使用XSLT將Input XML轉換爲Output XML: 我需要刪除XML中沒有'Type'元素的值爲'Account'的子元素的'RElement'。 'RElement'是遞歸的。XSLT刪除XML中的元素

輸入XML的

<RElement> 
<Type>Group</Type> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Account</Type> 
</RElement> 
</RElement> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Group</Type> 
    <RElement> 
    <Type>Group</Type> 
    </RElement> 
</RElement> 
</RElement> 
</RElement> 

輸出XML的

<RElement> 
<Type>Group</Type> 
<RElement> 
<Type>Group</Type> 
<RElement> 
    <Type>Account</Type> 
</RElement> 
</RElement> 
</RElement> 
+1

你嘗試過這麼遠嗎?請編輯問題並顯示您當前的XSLT。 –

回答

0

你可以試試這個:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml"/> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="RElement[not(.//Type[text() = 'Account'])]" /> 
</xsl:stylesheet> 

基本上它的身份與RElement元素的空模板沒有按」變換t在其後代子元素中具有值爲'Account'的'Type'元素。

編輯添加伊恩·羅伯特的空的模板,這是更好的:

<xsl:template match="RElement[not(.//Type = 'Account')]" /> 
+1

或者更簡單,'' - 在這種情況下你不需要'text()',因爲你關心的是「Type」元素的完整字符串值,而不是其中的單個文本節點。 –