我发现了与您相同的问题,因为双引号引起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