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#和您使用的环境,但您需要找到一种方法来选择值,而不是节点。