2017-08-02 18 views
0

xPathを使用してデータを操作することに基づく基本的なHTMLレポートテンプレートシステムを作成しています。基本的には、あるクラスを持つノードまたはその子を選択するxPathクエリが必要です。共用体でxPathを使用してノードを選択する

$query = $xPath->query (".//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]", $node); 

Iは、XPathセレクタ.//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]は、具体的子孫ノード$nodeパラメータのを見ていることを理解します。

基本的に "ノードまたはその子"に問い合わせるxPathクエリが必要です。私は組合オペレータ、|があることを知っていますが、私はその実装方法を見ていません。私はこのような何かを想像したでしょう:.[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] | .//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]しかし、これはInvalid expressionエラーを生成します。

+0

ノードまたはその子は、ノードとその子を意味しますか? – akond

+0

"Union"のように論理ORを意味します。 – Philip

+0

親と子の両方に-delete-if-no-stockforceクラスを含める必要がありますか? – akond

答えて

1

XPath式は、フィルタとして働きます。それらは、そのような意味で集約/コンパイルしません(SQL連合のように)。

ここには、何をしようとしているかによっていくつかの可能性があります。

代替表現

パイプ記号|あなたは複数の式を指定することができます - それは、CSSセレクタでコンマ,ように動作します。

expression_one|expression_two

複雑な条件式で

条件はandorだけでなく、ブラケットを使用することができます。

/location/path[condition and condition or condition]

XPath式は、フィルタが適用されるノードの初期セットを定義軸の概念を持っています。

axis::node[condition]

.//*self::node()/descendant::*の略です。現在のノードとすべての子孫を含むdescendant-or-selfという軸があります。

descendant-or-self::*[contains(...)]

0

軸演算子を使用してみてください...

descendant-or-self::node()[contains(concat(' ', @class, ' '), ' -delete-if-no-stock ')] 
関連する問題