XPath: выделите текст после

#javascript #html #dom #xpath

#javascript #HTML #dom #xpath

Вопрос:

Я не могу создать выражение XPath, чтобы очистить текст между <br> тегами. Любая помощь была бы с благодарностью:

Веб-страница:

 <hr>
<center>
<a href="http://www.somewebsite.html" target="_blank">Description</a>
</center>
<br>
SEC 10 TWP 20 RGE 30
<br>
PLAT BOOK A PAGE 200
<br>
BLK 10 LOTS 1.4.5.6.7.8. EX
<br>
POSSIBLY MORE TEXT...
<br>
<hr>
  

Скопируйте результат XPath для <href> :

 //*[@id="prc"]/table/tbody/tr/td/center[6]/a
  

Javascript:

 var Xpath = 'substring-after(//*[@id="prc"]/table/tbody/tr/td/center[6]/a, "Description")';

var parser = new DOMParser();
var doc = parser.parseFromString(html, 'text/html');

//Property Description
var result = doc.evaluate(Xpath, doc, null, XPathResult.STRING_TYPE, null);
Description = result.stringValue;

//Display Message
alert("Description Search Results: "   Description);
  

Желаемый результат для отображения сообщения:

 SEC 10 TWP 20 RGE 30
PLAT BOOK A PAGE 200
BLK 10 LOTS 1.4.5.6.7.8. EX
POSSIBLY MORE TEXT...
  

Комментарии:

1. Может быть, что-то вроде //*[@id="prc"]/table/tbody/tr/td/br/following::text() . Возможно, вам потребуется некоторая постобработка, чтобы очистить результирующие строки.

Ответ №1:

Поскольку существуют различные текстовые узлы, XPath 1.0 недостаточно мощный, чтобы выдать вам результат в виде одной строки с одним выражением. Используя SaxonJS.XPath, вы могли бы, однако, использовать string-join функцию XPath 2.0 и более поздних версий:

 const html = `<hr>
<center>
<a href="http://www.somewebsite.html" target="_blank">Description</a>
</center>
<br>
SEC 10 TWP 20 RGE 30
<br>
PLAT BOOK A PAGE 200
<br>
BLK 10 LOTS 1.4.5.6.7.8. EX
<br>
POSSIBLY MORE TEXT...
<br>
<hr>`;

const doc = new DOMParser().parseFromString(html, 'text/html');


alert(SaxonJS.XPath.evaluate("string-join(//center[a[. = 'Description']]/following-sibling::text()/normalize-space(), 'n')", doc, { xpathDefaultNamespace : 'http://www.w3.org/1999/xhtml' }))  
 <script src="https://www.saxonica.com/saxon-js/documentation/SaxonJS/SaxonJS2.rt.js"></script>