【问题标题】:XPath : Select Text AfterXPath:选择文本之后
【发布时间】:2020-12-18 22:27:08
【问题描述】:

我无法构造 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>

复制 &lt;href&gt; 的 XPath 结果:

//*[@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...

【问题讨论】:

  • 可能类似于//*[@id="prc"]/table/tbody/tr/td/br/following::text()。您可能需要一些后处理来清理生成的字符串。

标签: javascript html dom xpath


【解决方案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' }))
&lt;script src="https://www.saxonica.com/saxon-js/documentation/SaxonJS/SaxonJS2.rt.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多