3

私はこの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 パラメータは正しいです。一致するはずなので、なぜエラーが返されるのかわかりません。

誰かが私が間違っていることを見ていますか?

4

1 に答える 1

5

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());
于 2012-12-07T22:29:27.553 に答える