使用XPath获取含混合元素的div文本时遇到问题求助
解决XPath提取嵌套标签文本的问题
嘿,我完全懂你碰到的麻烦——你写的那些XPath表达式只抓取了目标节点直接子节点的文本,嵌套在<b>、<a>这类子标签里的内容自然就被跳过啦。而且我注意到你写的表达式里还有个小语法错误:contains('@class','something')里的引号位置不对,应该是contains(@class,'something')(属性名不用加引号包裹)。
给你几个靠谱的解决方案:
1. 获取所有后代文本节点(保留节点结构)
如果你想获取目标<div>下所有层级的文本节点,不管它嵌套在哪个子标签里,用这个XPath:
//div[contains(@class,'something')]//text()
这里的//text()表示选取当前节点下所有后代的文本节点,而不是像/text()只选直接子节点的文本。
2. 合并所有文本为单个字符串
如果你的需求是把<div>里的所有文本(包括嵌套标签里的)合并成一个完整的字符串,可以用string()函数:
string(//div[contains(@class,'something')])
这个函数会自动把目标节点下的所有文本内容拼接起来,忽略标签结构,返回一个连续的字符串。
验证一下你的示例HTML
针对你给出的HTML:
<div class="something"> <p> This is a <b> Paragraph </b> with <a href="/something"> mixed </a> elements </p> <p> Next paragraph.... </p> </div>
用第一个XPath会得到所有零散的文本节点:
This is aParagraphwithmixedelementsNext paragraph....
用第二个XPath会得到合并后的字符串:This is a Paragraph with mixed elements Next paragraph....
这样就能完美覆盖你之前漏掉的嵌套标签文本啦!
内容的提问来源于stack exchange,提问作者TacticalGoat
相关产品推荐
相关产品推荐

