Xml XPath-在没有具有属性的子级时查找父级

Xml XPath-在没有具有属性的子级时查找父级,xml,xpath,Xml,Xpath,我试图查找对没有具有特定属性值的子节点(属性)的节点(报表)的每个引用 我的xml是: <report xmlns="http://www.eclipse.org/birt/2005/design"> <property name="comments">comment</property> <property name="test">sdcs</property> <property name="eventHandlerClass

我试图查找对没有具有特定属性值的子节点(属性)的节点(报表)的每个引用

我的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()

假设您已注册
“http://www.eclipse.org/birt/2005/design“
as
birt

//birt:report[not(birt:property[@name='eventHandlerClass'])]
如果由于某种原因无法注册命名空间,请使用(包装以便于阅读)


问题是您的报表包含的属性不是evenHandlerClass。你想说没有这样的孩子,这可以通过计算这样的孩子并得到零来实现:

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