2010年6月2日星期三

[PerlChina] 请教个xpath的问题

部分源码如下:
<tr>
<td valign="top" class="FieldName"><b>Mineral Name</b></td>
<td valign="top">&nbsp;</td>
<td valign="top">Kh, sy</td>
</tr>

<tr>
<td valign="top" class="FieldName"><b>Formula</b></td>
<td valign="top">&nbsp;</td>
<td valign="top">TX<sub>2</sub></td>
</tr>

<tr>
<td valign="top" class="FieldName"><b>PSymbol</b></td>
<td valign="top">&nbsp;</td>
<td valign="top">xxy</td>
</tr>
我想通过'/html/body/table/tr/td[@valign="top"][1]'来获取class="FieldName"的
Text,从而确定'/html/body/table/tr/td[@valign="top"][3]'的值(同一个表格下的值是一一对应的,
Formula: TX2, PSymbol: xxy, ..., 类似于hash,我想通过其key来获取value )
想法是
my $nodes = $tree->findnodes( '/html/body/table/tr/td[@valign="top"]
[1]' ); #目标节点
for my $node ( $nodes->get_nodelist() ){
# print "$node\n"; #HTML::Element
my $txt= $node->as_trimmed_text();
##问题就是在此,$txt就是class="FieldName"的Text,可是此时我如何定位至同级下的[3]呢?
##$node是一个HTML::Element,其方法太多,我看过了也很快就忘记了,其中貌似有一个parent的方法,获得的
##还是一个HTML::Element,我可以通过$node->parent()->as_trimmed_text()获取其
Text,可是这么又曲折了,需要对获得的文本进行二次处理
##能否直接根据[1]定位至[3]直接获取其文本呢?貌似是一个xpath的问题,实在是外行,见笑了
}
不知道 我说的是否清楚,非常感谢!

第二个问题是:为何H T M L__T r e e B u i l d e r__X P a t h解析得到总是带有乱码,无论是W W W
Mechanize得到的还是本地文件,用了use HTTP::Response::Encoding; 无果,Encode之类的也是如此,网上方
法n多,解释原因也n多,我试过一些,不好使,大约是本质原因还不明白,记得有人说是UserAgent中的设置,比如
Accept_Charset, Accept_Language之类的基本都试过了,是否是我通过设置UA来模拟一个浏览器的行为还不够呢,显然浏览
器中显示没有任何问题,网页编码设置在Mech中我也试过了,难道这两点还不够么?
请问有没有人碰到过类似问题,如何解决的,非常感谢

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: