我已将此 XPath 表达式重写为 linq,但出现了问题(未找到元素异常)。我的HTML:
string xml = @"
<root>
<div id=""main"">
<div class=""content"">
<ul>
something
</ul>
</div>
<div class=""content"">
<ul>
something
</ul>
</div>
<div class=""content"">
<ul>
<li>
<div>My text</div>
</li>
</ul>
</div>
</div>
</root>
";
Xpath:
//div[@id="main"]//div[@class="content"]/ul/li/div
林克:
string Content =
doc.DocumentNode.Descendants("div").First(x => x.GetAttributeValue("id", null) == "main")
.Descendants("div").First(x => x.GetAttributeValue("class", null) == "content")
.Descendants("ul").First()
.Descendants("li").First()
.Descendants("div").First().InnerText
背景:我必须使用 LINQ,因为我使用的是便携式库。
我已经用稍微不同的表达方式解决了我的问题:
string Content =
doc.DocumentNode.Descendants("div").First(x => x.GetAttributeValue("id", null) == "main")
.Descendants("div").Where(x => x.GetAttributeValue("class", null) == "content").ElementAt(2)
.Descendants("ul").First()
.Descendants("li").First()
.Descendants("div").First().InnerText;
它可以工作,但它与 Xpath 不同。
所以我问你:是否存在 LINQ 表达式,它在没有指定确切位置的情况下找到带有 InnerText 的节点(如 Xpath)?