2012-11-27 6 views
5

私はウェブスクレイピング用のGoogleドキュメントを使用しています。具体的には、IMPORTXML関数で構築されたGoogleスプレッドシートを使用しています。この関数では、XPathを使用してデータをスクラップするノードを選択しています。XPath単純条件文?ノードXが存在する場合は、Yを実行しますか?

私がしようとしているのは、基本的に特定のノードが存在するかどうかをチェックすることです。そうであれば、他のランダムノードを選択します。

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

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

} 

答えて

7

あなたはXPathのロジックに似ていませんが、好きなようにすることができます。

//table/tr/td[2]/aを選択する場合は、img[@class='special']がある場合のみ//table/tr/td[2]/a[img[@class='special']]を使用できます。

他のノードを選択したい場合は、2つのパス(|演算子)を結合し、それぞれには相互排他的なフィルタ([]内)があることを確認してくださいパスともう1つはそのパスのnot()です。私は例を挙げるだろうが、あなたが望むだろう "他のランダムノード"が何か分からない...おそらくあなたは明らかにすることができるだろうか?

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

+0

感謝。私は基本的に '/ div/div/table/tr/td [2]/a/img [@ class =' special ']'のような深いパスをチェックしようとしています。子どもに「特別な」クラスが適用されていない要素は、であり、「/ div/div/table/tr/td [2]/a」であり、要素はではありません。 – AnchovyLegend

+1

私が言及した '/ table/tr/td [2]/a [img [@ class = 'special']]'はあなたが探しているものです。 '特別な'クラスを持つ 'img'要素を持つ' a'要素だけを取得します。 –

1

使用:返信用

/self::node()[//table/tr/td[2]/a/img[@class='special']] 
    //table/tr/td[2]/a 
関連する問題