我正在尝试查询此 xml:
<pageMap>
<pageMapNode id="8039CE09-E7DA-47E1-BCEC-DF96B5E411F4">
<pageMapNode id="79DC0E8A-82F1-47DF-836E-099665A7D2E3"></pageMapNode>
<pageMapNode id="3B79FAAC-EB2D-41AC-A91E-12541D0EB377">
<pageMapNode id="170A9FC3-C03E-4088-AC5E-93AA038E0114"></pageMapNode>
</pageMapNode>
</pageMapNode>
<pageMapNode id="A34CADA7-317D-405C-8E8F-DB113F40407F"></pageMapNode>
</pageMap>
这是我的功能:
protected string GetParent(Guid nodeId)
{
XDocument doc = XDocument.Parse(GetXml()); // parses xml displayed above
// returns the 5 page map nodes displayed above
IEnumerable<XElement> nodes = doc.Descendants("pageMapNode");
// error: "Sequence contains no elements"
XElement node = doc.Descendants("pageMapNode")
.Where(n => n.Attribute("id").ToString().ToLower() ==
nodeId.ToString().ToLower()).Single();
...
}
我传入的 nodeId 参数是正确的 - 我应该得到一个匹配项,所以我不知道为什么会返回错误。
有人看到我做错了什么吗?
最佳答案
n.Attribute("id")
返回一个 XAttribute,而不是一个字符串。您需要 .Value
而不是 .ToString()
XElement node = doc.Descendants("pageMapNode")
.Where(n => n.Attribute("id").Value.ToLower() ==
nodeId.ToString().ToLower()).Single();
你可以将它缩短为
XElement node = doc.Descendants("pageMapNode")
.Single(n => n.Attribute("id").Value.ToLower() ==
nodeId.ToString().ToLower());
关于c# - XElement 查询给出错误 : "Sequence contains no elements",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771864/