Как разобрать имя автора и название книги из очищенного HTML с помощью XPath? - PullRequest
3 голосов
/ 18 октября 2010

HTML-код, который вы видите ниже, представляет собой текст, который я скопировал с удаленного сайта, как есть, в локальную переменную.

Теперь мне нужно проанализировать authorName и bookTitle из тегов HTML в их собственные переменные, учитывая следующий согласованный формат выделенного текста:

<p>
  William Faulkner - 'Light In August'
  <br/>
  William Faulkner - 'Sanctuary'
  <br/>
  William Faulkner - 'The Sound and the Fury'
</p>

Возможно ли этосделать это в XPath?

Ответы [ 3 ]

2 голосов
/ 18 октября 2010

В XPath 1.0 вы можете выбрать дочерний текстовый узел p:

/p/text()

Вы также можете получить строку до (автор) и после (название) - символ для каждого текстового узла

substring-before(/p/text()[1],'-')

Результат:

  William Faulkner 

substring-after(/p/text()[1],'-')

Результат:

 'Light In August'       

В XPath 2.0:

/p/text()/substring-before(.,'-')

Результат в последовательности из 3 предметов:

William Faulkner William Faulkner William Faulkner 

и

/p/text()/substring-after(.,'-')

Результат также в последовательности из 3 предметов:

'Light In August' 'Sanctuary' 'The Sound and the Fury'
2 голосов
/ 18 октября 2010

Да.И просто:

//p/text()

Даст вам три отдельных текстовых узла:

"
  William Faulkner - 'Light In August'
  ",
"
  William Faulkner - 'Sanctuary'
  ",
"
  William Faulkner - 'The Sound and the Fury'
"

Помните, что предшествующий и конечный пробел (включая любые разрывы строк) всегда является частью текстового узла,Обрежьте результат.

Я так понимаю, вам не нужна помощь в разбивке результирующих строк на автора и заголовок.

1 голос
/ 18 октября 2010

Вы можете получить имя $ N-го автора с помощью этого выражения XPath :

substring-before(normalize-space(p/text()[$N]), ' -')

Вы можете получить $ N-ный заголовок с этим выражением XPath :

substring-after(normalize-space(p/text()[$N]), ' - ')

Сначала вы можете получить счетчик всех текстовых узлов с помощью:

count(p/text())

затем вы можете выдать первые два выражения XPath, заменив $N числами в интервале

[1,count(p/text())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...