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 に答える