C# XPath:如何获得两个同级节点的连接文本?
我想知道如何获得两个同级节点的连接文本 这是我的密码C# XPath:如何获得两个同级节点的连接文本?,c#,html,xpath,html-agility-pack,C#,Html,Xpath,Html Agility Pack,我想知道如何获得两个同级节点的连接文本 这是我的密码 string html = "<html>" + " <div class='abc'>" + " <h3><a href='def'>ghi</a></h3>" + " <div>text1</div>" + " <div>text2</div>
string html =
"<html>" +
" <div class='abc'>" +
" <h3><a href='def'>ghi</a></h3>" +
" <div>text1</div>" +
" <div>text2</div>" +
" </div>" +
" <div class='abc'>" +
" <h3><a href='jkl'>mno</a></h3>" +
" <div>text3</div>" +
" <div>text4</div>" +
" </div>" +
"</html>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='abc']");
HtmlNodeCollection nodes2, nodes3;
foreach (HtmlNode node in nodes)
{
nodes2 = node.SelectNodes(".//h3/a");
nodes3 = node.SelectNodes("?????????????");
}
然后
text3text4
如何编写问号替换查询?我知道我可以通过使用foreach遍历节点来获取文本。但我必须使用XPath查询来实现这一点
谢谢。我不确定我是否理解,但是考虑到外部
div
元素是您的上下文,下面的表达式:
concat(div[1],div[2])
nodes2 = node.SelectNodes(".//h3/a");
将返回第一个和第二个子div
元素的字符串值的串联
顺便说一句,
h3
是/html/div
的直接子级,因此在此表达式中不需要使用/
:
concat(div[1],div[2])
nodes2 = node.SelectNodes(".//h3/a");
你可能想把它简化为
nodes2 = node.SelectNodes("h3/a");
应该给出:text1text2
concat(//div[@class='abc'][2]/div[1]/text(), //div[@class='abc'][2]/div[2]/text())
应该给出text3text4
这应该适用于htmlagilitypack中使用的XPath1.0。@Mathias Müller的评论就是答案 SelectNodes返回节点列表,我们必须使用C#编程在集合节点中导航
错误是我正在等待文本结果。我尝试了
concat(div[1],div[2])
但得到了“表达式必须计算为节点集”错误。@ErcanOrak此表达式的结果是字符串,而不是节点集。我不熟悉C#和您使用的环境,但您需要找到一种方法来选择值,而不是节点。