1

私は次のxmlを持っています:

<root ...>
  <Tables>
    <Table content="..">
    </Table>
    <Table content="interesting">
      <Item ...></Item>
      <Item ...></Item>
      <Item ...></Item>
    </Table>
    ...etc...
  </Tables>
</root>

次のコードを使用して、「興味深い」ノードからアイテムを取得しています。

XElement xel = XElement.Parse(resp);

var nodes = from n in xel.Elements("Tables").Elements("Table")
            where n.Attribute("content").Value == "interesting"
            select n;

var items = from i in nodes.Elements()
            select i;

これを達成するためのより簡単でクリーンな方法はありますか?

4

4 に答える 4

5

に対してクエリ式を使用しても意味がありませんitems。すべてを非常に簡単に 1 つのステートメントにまとめることができます。そのためのクエリ式も気にしません。

var items = XElement.Parse(resp)
                    .Elements("Tables")
                    .Elements("Table")
                    .Where(n => n.Attribute("content").Value == "interesting")
                    .Elements();

これ (および現在のクエリ) は、属性のないTable要素に対して例外をスローすることに注意してください。contentスキップしたい場合は、次を使用できます。

.Where(n => (string) n.Attribute("content") == "interesting")

代わりは。

于 2013-06-10T11:18:28.027 に答える
2

XPath (拡張子はSystem.Xml.XPath名前空間にあります) を使用して、1 行ですべての項目を選択できます。

var items = xel.XPathSelectElements("//Table[@content='interesting']/Item");
于 2013-06-10T11:23:06.607 に答える
1

nodesのクエリ以外が必要ない場合はitems、次のようにするだけです。

var items = from n in xel.Elements("Tables").Elements("Table")
            where n.Attribute("content").Value == "interesting"
            from i in n.Elements()
            select i;
于 2013-06-10T11:19:36.010 に答える
1

xml ドキュメントの使用
XmlDocument xdoc = new XmlDocument();

var item= xdoc.GetElementsByTagName("Table[@content='interesting']/Item");

于 2013-06-10T11:28:09.663 に答える