2010-06-23 65 views
0

我正在从HTML文档中提取文本并存储在数据库中。我正在使用webharvest工具来提取内容。不过,我有点卡住了。 webarvest内部我使用XQuery表达式来提取数据。我解析的html文件如下:Xquery提取文本

<td><a name="hw">HELLOWORLD</a>Hello world</td> 

我需要从上面的html脚本中提取“Hello world”文本。

我试图以这种方式提取文本:

$hw :=data($item//a[@name='hw']/text()) 

但是我始终得到的是“HelloWorld”的,而不是“世界,你好”。

有没有办法提取“Hello World”。请帮忙。

如果我想这样做是这样的:

 <td> 
     <a name="hw1">HELLOWORLD1</a>Hello world1 
     <a name="hw2">HELLOWORLD2</a>Hello world2 
     <a name="hw3">HELLOWORLD3</a>Hello world3 
    </td> 

我想提取文本世界,你好2是在betweeb HW2和HW3。我不想使用text()[3],但有什么方法可以在/ a [@ name ='hw2']和/ a [@ name ='hw3']之间提取文本。

回答

1

首先,您正在寻找名称属性以'hw'开头的节点。这可以通过以下路径来实现:

$item//a[starts-with(@name,'hw')] 

一旦你找到你想要检索后面的一个节点的第一个文本节点的一个节点。这可以这样做:

$item//a[starts-with(@name,'hw')]/following-sibling::text()[1] 
+0

非常感谢你解决问题 – Technocrat 2010-06-23 13:37:07