0

Linq to Xml は初めてです。次のような非常に単純なxmlファイルがあります。

<Items>
    <Item>
       <Stuff>Strings</Stuff>
    </Item>
    <Item>
       <Stuff>Strings</Stuff>
    </Item>
</Items>

そして、私は次のようにクエリを実行しようとしています:

XDocument doc = XDocument.Load(myStream)
from node in doc.Descendants(XName.Get("Item"))
    select new { Stuff = node.Element(XName.Get("Stuff")).Value }

しかし、doc.Descendents(XName.Get("Item")) は null を返します。ここで私の理解に何か問題があります。

4

3 に答える 3

1

あなたのコードは実際に動作します:

static void Main(string[] args)
{
    string xml = @"
                <Items>
                    <Item>
                        <Stuff>Strings</Stuff>
                    </Item>
                    <Item>
                        <Stuff>Strings</Stuff>
                    </Item>
                </Items>";

    using (StringReader myStream = new StringReader(xml))
    {
        XDocument doc = XDocument.Load(myStream);

        var query = from node in doc.Descendants(XName.Get("Item"))
                    select new { Stuff = 
                        node.Element(XName.Get("Stuff")).Value };

        foreach (var item in query)
        {
            Console.WriteLine("Stuff: {0}", item.Stuff);
        }
    }

要素が名前空間で修飾されていない場合、XName は実際には必要ないことに注意してください。

static void Main(string[] args)
{
    string xml = @"
                <Items>
                    <Item>
                        <Stuff>Strings</Stuff>
                    </Item>
                    <Item>
                        <Stuff>Strings</Stuff>
                    </Item>
                </Items>";

    using (StringReader myStream = new StringReader(xml))
    {
        XDocument doc = XDocument.Load(myStream);

        var query = from node in doc.Descendants("Item")
                    select new { Stuff = node.Element("Stuff").Value };

        foreach (var item in query)
        {
            Console.WriteLine("Stuff: {0}", item.Stuff);
        }
    }
}
于 2009-02-19T18:39:20.950 に答える
0

doc.Root.Decendants("Item") を使用してみてください

于 2009-02-19T18:37:30.080 に答える
0

System.String から XName への暗黙的な変換があるため、より一般的な形式は次のとおりです。

...doc.Descendants("Item")

...node.Element("Stuff").Value

それに加えて、前の回答のように doc.Root.Descendants() をお勧めします。ドキュメントがロードされたとき、ドキュメントは依然として階層の「最上位」にあります。私は Descendants() が再帰的であるという印象を受けましたが、誰が知っていますか?

于 2009-02-19T18:37:49.813 に答える