0

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

我的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'])]

问题是,当我正在寻找它不返回任何东西时,它正在返回报告。

有什么想法是最好的方法吗?

4

2 回答 2

1

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

/*[local-name()='report'][count(*[(local-name()='property' and @name="eventHandlerClass")])=0]
于 2012-07-25T18:03:14.510 回答
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']
  )
]
于 2012-07-25T18:02:48.963 回答