2014-12-02 3 views
0

Я пытаюсь прочитать некоторые данные из XML. Я использую тот же код в другом приложении с почти идентичным XML-макетом, который, кажется, работает .. Но я не могу получить код, который будет запускаться внутри цикла foreach с помощью этого кода:Цикл Foreach не будет читать XML

Кажется, что прочитал XML хорошо, если Если есть точки останова и просмотра _xml.Elements

XElement value in _xml.Elements("effects").Elements("effect") 

C#

XElement _xml = XElement.Load("Effects.xml"); 
       { 
        foreach (XElement value in _xml.Elements("effects").Elements("effect")) 
        { 
         //will not execute any code in here. 
         DVOXML _item = new DVOXML(); 
         _item.Name = value.Element("name").Value; 
         _item.Param = value.Element("params").Value; 


        } 
       } 

XML:

<?xml version="1.0" ?> 
<effects> 
    <effect> 
    <name>effect1</name> 
    <params>xmldata</params> 
    </effect> 
    <effect> 
    <name>effect2</name> 
    <params>xmldata</params> 
    </effect> 
</effects> 
+0

Просто чтобы проверить - вы уверены, что 'value' содержит XML и загружается, правильно? Вы должны уметь отлаживать его и легко проверять, наведя на него курсор мыши. – Codeman

+1

Я думаю, что ваша проблема может заключаться в том, что вы не смотрите на корень - попробуйте '_xml.Root.Elements (« effect »)' и дайте мне знать, если это сработает. Вероятно, он не выполняет какой-либо код, потому что вы возвращаете 0 элементов из вашего запроса LINQ-XML. – Codeman

+0

@ Значение Phoenixblade9 действительно пусто. И нет метода _xml.Root extention –

ответ

2

В вашем случае эффекты - это корень.

Используйте это:

foreach (XElement value in _xml.Elements("effect")) 
{ 
    ..... 
} 
2

Вам не нужно включать «эффекты» в запросе - что уже корень. Просто используйте это как ваш запрос:

foreach (XElement value in _xml.Elements("effect")) 

Вот fiddle демонстрирует, что он работает.

+0

:) Действительно. Я пытаюсь включить .NET Fiddle с моими ответами, когда это возможно, обычно означает, что я немного позже, ну хорошо – Codeman

+0

Удерживайте один .. он работает, если я читаю текст xml.parse, но он не будет работать, если я загружу из мой файл с тем же текстом: XElement _xml = XElement.Load ("Effects.xml"); –

+0

@DanSewell Ваш xml-файл должен находиться в том же месте, что и сборка для работы. В противном случае вам нужен абсолютный путь. 'C:/myfile.xml' или что-то подобное – Codeman