#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>