1

私は次のようなXMLを持っています:

<?xml version="1.0" encoding="utf-8"?>
     <University>
          <Colleges>
            <College>
              <Id> Cambridge </Id>
              <Dept>
                <Id> Arts</Id>
              </Dept>
            </College>
            <College>
              <Id> Oxford</Id>
              <Dept>
                <Id> Philosophy </Id>
              </Dept>
            </College>
          </Colleges>
        </University>

IDに基づいて大学を返還したい。別のシナリオでは、大学のIDだけを書きたいと思います。

Idを直接読み取るためのLINQステートメントの記述方法がわかりません。Descendants()あらゆる段階で使用できます。しかし、XML構造の奥深くにある要素を選択するにはどうすればよいでしょうか。

4

2 に答える 2

4

たぶん、XPathを使用する必要があります。構文は、純粋なLinqクエリよりも単純になります。

using  System.Xml;
using  System.Xml.XPath;
...

public foo()
{
    XElement yourNode = XElement.Parse(yourstring);
    XElement college = root.XPathSelectElement("//College[Id='Oxford']");
}

構造内の複数の位置にCollegeノードを配置できる場合、XPAthクエリ/University/Colleges/College[Id='OxFord']は競合の問題を回避します。

于 2012-07-11T09:39:39.060 に答える
3

LINQ-XML、

XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
              .Where(ele => ele.Element("Id").Value.Trim() == "Oxford");
于 2012-07-11T09:44:11.370 に答える