5

私はウェブスクレイピングにグーグルドキュメントを使用しています。具体的には、XPathを使用してデータを取得するノードを選択するIMPORTXML関数に組み込まれているGoogleスプレッドシートを使用しています。

私がやろうとしているのは、基本的に特定のノードが存在するかどうかを確認し、存在する場合は他のランダムノードを選択することです。

/*IF THIS NODE EXISTS*/
if(exists(//table/tr/td[2]/a/img[@class='special'])){

   /*SELECT THIS NODE*/ 
   //table/tr/td[2]/a

}
4

2 に答える 2

7

XPath にはそのようなロジックはありませんが、必要に応じて何かを実行できる可能性があります。

//table/tr/td[2]/aが含まれている場合にのみ選択したい場合は、img[@class='special']を使用できます//table/tr/td[2]/a[img[@class='special']]

他の状況で他のノードを選択する場合は、2 つのパス (|演算子) を結合[]し、一方をパスにして他方をnot()そのパスの。例を挙げたいと思いますが、どの「他のランダム ノード」が必要なのかわかりません…おそらく明確にしていただけますか?

重要なことは、XPath を手続き型言語ではなくクエリ言語と考えることです。そのため、セレクターとフィルターについて考える必要があります。これは、ほとんどのプログラマーが慣れ親しんでいる問題に対する考え方とはかなり異なります。しかし、フィルターが特にセレクターに関連している必要がないという事実 (たとえば、ドキュメントのルートを調べ始めるフィルターを使用することができます) は、いくつかの強力な (読みにくい場合) 可能性につながります。

于 2012-11-27T02:29:32.677 に答える
1

使用:

/self::node()[//table/tr/td[2]/a/img[@class='special']]
   //table/tr/td[2]/a
于 2012-11-27T14:25:11.853 に答える