2010-06-23 2 views
0

Я работаю над извлечением текста из html-документов и хранением в базе данных. Я использую инструмент webharvest для извлечения содержимого. Однако я как бы застрял в точке. Внутри webharvest я использую выражение XQuery inorder для извлечения данных. HTML документ, который я разбор выглядит следующим образом:Xquery для извлечения текста

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

Мне нужно извлечь «Hello World» текст из приведенных выше HTML сценария.

Я попытался извлекая текст таким образом:

$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

Смежные вопросы