2012-05-22 87 views
3

我有一個XML包含以下信息,我使用XPath來解析它XPath過濾子節點

<root> 
    <a> 
    <b></b> 
    <c></c> 
    <d></d> 
    </a> 
    <a> 
    <b></b> 
    <c></c> 
    <d></d> 
    </a> 
</root> 

我的目標是要獲取標記的「A」的節點列表,並在每個子節點列表中包含「B '和'c'(等等過濾'd'!)我現在正在做的是使用'/ root/a'來獲取包含所有'a','b'和'c'的節點,然後去掉' c'之後,我的目標是做XPA中的過濾而不是使用額外的代碼,反正我可以做到嗎?謝謝!

+0

如果我(或任何其他將來的答案)可以幫助您,請考慮通過單擊答案左側的箭頭將其中一個標記爲已接受。這顯示了哪個答案對你最有幫助,並且將信譽點分配給答案的作者(和你!)。 – topskip

+0

抱歉,新到這裏,不知道這個傳統,加了一點對你的評論回答,幫助我們可以有更多的交談,謝謝! – user1409920

回答

2

您可以通過複製下面的圖案中的所有內容來濾除元素,並截取要濾除的元素。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 


    <xsl:template match="a/d"/> 


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

</xsl:stylesheet> 

這是有效的,因爲特殊模板比普通模板具有更高的優先級。所以第二個適用於除d以下的所有元素,低於a。第一個模板不做任何事情,即忽略元素。

+0

嗨,帕特里克,謝謝你的幫助,我從網絡服務器接收有效載荷不認爲我可以改變XML結構,複製XML到一個新的速度太昂貴,我正在工作的項目是性能的關鍵,所以我正在尋找一種方法可以一次過濾掉父標籤中的標籤。 – user1409920

+0

@ user1409920這是「一氣呵成」 - 我不明白你的評論,對不起。 – topskip

+0

對不起英國人,我想我可以給一些更詳細的說明,我現在做的是使用'/ root/a'來獲取包含所有'a','b'和'c'的節點,然後擺脫' c'之後,我的意思是有沒有辦法在XPath中進行過濾,而不是使用額外的代碼來做到這一點?謝謝 – user1409920