質問

I have an XML document which I load from the disk

XDocument events = XDocument.Load("Content/GameData/events.xml");

The contents of this xml are the following:

<?xml version='1.0' encoding='UTF-8'?>
<Events>
    <level1>
        <NarrationEvent code="lvl1_fridge">
        I can't even remember when I last ate.
        I am not hungry though.
        </NarrationEvent>
        <NarrationEvent code="lvl1_tv">
        Why do I even have a TV?
        Oh right, I use it as a screen for my laptop.
        </NarrationEvent>
        <NarrationEvent code="lvl1_bed">
        Oh man, I am beat.
        </NarrationEvent>
        <NarrationEvent code="lvl1_computer">
        Oh, look at that. The project has been compiled.
        </NarrationEvent>
    </level1>
    <level2>

    </level2>
    <level3>

    </level3>
    <level4>

    </level4>
    <cave>

    </cave>
</Events>

I use this code here supposedly select the appropriate NarrationEvent element, based on its attribute "code"

IEnumerable<XElement> v =
            (from narrationEvent in events.Elements("NarrationEvent")
             where  (string)narrationEvent.Attribute("code") == code
             select narrationEvent);


foreach (XElement page in v)
{
    //Console.WriteLine("ff");
    narration.Add(page.Value);

}

This returns nothing, my XElement Ienumerable is empty. I used breakpoints and the code value is passed to this method just fine. e.g. "lvl1_bed"

What is wrong with this code?

役に立ちましたか?

解決

You can use the Descendants-Method to get your NarrationEvent-Element. I have updated your code accordingly.

IEnumerable<XElement> v = from narrationEvent in events.Descendants("NarrationEvent")
                          where narrationEvent.Attribute("code").Value == code
                          select narrationEvent;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top