我發現了與您相同的問題,因爲雙引號引起official WH user manual的示例不起作用。
的工作,我周圍使用:variable.toString().length() > 0
,這裏是你的代碼:
<var-def name="googleResults">
<xpath expression="//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/div/text()">
<html-to-xml>
<http url="http://google.com/shopping?q=asus laptops&hl=en"/>
</html-to-xml>
</xpath>
</var-def>
<var-def name="productTruth">
<case>
<if condition="${googleResults.toString().length() > 0}">
<var name="googleResults"/>
</if>
<else>
<xpath expression="//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/text()">
<html-to-xml>
<http url="http://google.com/shopping?q=asus laptops&hl=en"/>
</html-to-xml>
</xpath>
</else>
</case>
</var-def>
此外,通常在你的代碼的一些注意事項:
1)其實下載頁面是網絡收穫最耗時間和記憶力的部分。如果你想要的信息沒有被第一個xpath收集,你最終會重新下載頁面(重新運行http請求)。將http請求的結果保存在一個變量中,然後可以重新查詢結果,而不必重複下載 - 這也限制了您訪問源服務器的次數,如果您有多個頁面需要掃描,這會成爲一個問題。
<var-def name="pagetext">
<html-to-xml>
<http url="http://google.com/shopping?q=asus laptops&hl=en"/>
</html-to-xml>
</var-def>
<var-def name="googleResults">
<xpath expression="//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/div/text()">
<var name="pagetext"/>
</xpath>
</var-def>
<var-def name="productTruth">
<case>
<if condition="${googleResults.toString().length() > 0}">
<var name="googleResults"/>
</if>
<else>
<xpath expression="//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/text()">
<var name="pagetext"/>
</xpath>
</else>
</case>
</var-def>
2)你能避免整個條件改變的XPath:
//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/descendant-or-self::text()
<var-def name="pagetext">
<html-to-xml>
<http url="http://google.com/shopping?q=asus laptops&hl=en"/>
</html-to-xml>
</var-def>
<var-def name="googleResults">
<xpath expression="//div[@id='center_col']//div[@id='search']//div[@id='ires']//ol/li/div//b/descendant-or-self::text()">
<var name="pagetext"/>
</xpath>
</var-def>
我怎麼會在代碼本身使用這些?原諒我,我對XML和WebHarvest很陌生。 – user2330657 2013-05-02 07:58:02
我已經更新了我的答案。請看看 – 2013-05-02 08:57:10