2012-07-25 90 views
0

我試圖找到沒有具有特定屬性值的子節點(屬性)的節點(報表)的每個引用。XPath - 查找沒有屬性的子項時的父項

我的XML是:

<report xmlns="http://www.eclipse.org/birt/2005/design"> 
<property name="comments">comment</property> 
<property name="test">sdcs</property> 
<property name="eventHandlerClass">sdcs</property> 
</report> 

,我的XPath是:

/*[local-name()='report'][not(/*[local-name()='property'][@name='eventHandlerClass'])] 

問題是,它返回時,我正在尋找它不返回任何報告。

任何想法的最佳方式來做到這一點?

回答

1

的問題是,您的報告中包含屬性不是evenHandlerClass。你想說沒有這樣的孩子,這可以通過計數這樣的孩子並得到零:

/*[local-name()='report'][count(*[(local-name()='property' and @name="eventHandlerClass")])=0] 
0

請在執行XPath之前註冊一個名稱空間。

使用local-name()工程,但它產生非常不雅觀(和低效率)的XPath。

假設您已經註冊"http://www.eclipse.org/birt/2005/design"birt

//birt:report[not(birt:property[@name='eventHandlerClass'])] 

如果由於某種原因,你不能註冊一個命名空間,使用(包裝的可讀性)

//*[ 
    local-name() = 'report' 
    and not(
    *[@local-name() = 'property' and @name='eventHandlerClass'] 
) 
] 
+0

+1爲更好的答案。 – 2012-07-30 05:33:59