2016-08-08 3 views
0

У меня есть документ XML, который выглядит, как этотGetElementByTagName возвращает System.Xml.XmlElementList

<?xml version="1.0" encoding="utf-8" ?> 
<event> 
    <name>Test Event</name> 
    <date>07/09/1997</date> 
    <description>Birthday</description> 
    <blogURL></blogURL> 
</event> 

Я хочу, чтобы захватить эти поля и отображать их в ASP:Labels

Это мой код за

protected void Page_Load(object sender, EventArgs e) 
    { 
     XmlDocument pressRelease = new XmlDocument(); 
     pressRelease.Load(Server.MapPath("~/PressSection.xml")); 

     XmlNodeList name = pressRelease.GetElementsByTagName("name"); 
     CurrentEventName.Text = name.ToString(); 
    } 

Но это то, что показано на этикетке

System.Xml.XmlElementList 

Не совсем уверен, что я делаю неправильно.

ответ

1

как имя может предложить и, как the documentation tells you, метод возвращает:

XmlNodeList, содержащий список всех соответствующих узлов. Если ни один узел не соответствует имени, возвращаемая коллекция будет пустой.

Вам нужно перебирать этот список, или просто взять первый элемент, если вы уверены, что всегда будет там:

var names = pressRelease.GetElementsByTagName("name"); 
CurrentEventName.Text = names[0].Value; 

Тем не менее, LINQ к XML является гораздо лучше API, я обязательно предложит вам узнать больше об этом:

var doc = XDocument.Load(Server.MapPath("~/PressSection.xml")); 
CurrentEventName.Text = (string)doc.Descendants("name").Single(); 
+0

Я не уверен, как использовать Linq для xml. Я попытался добавить это , используя 'System.Xml.Linq;' , но он говорит, что он не существует – onTheInternet

+0

@onTheInternet. Вы также должны быть ориентированы на .NET 3.5 или новее и иметь ссылку на 'System.Xml.Linq.dll' (проверьте ссылку« ссылки »вашего дерева проектов, вы можно щелкнуть правой кнопкой мыши и добавить ссылку, если она отсутствует). –

+0

Я использую LINQ сейчас (ссылка отсутствовала. Спасибо. Я думал, что должен добавить ее через nuget), и ее легче следовать. Большое спасибо. – onTheInternet

0

попробовать этот способ

XDocument doc = XDocument.Load(Server.MapPath("~/PressSection.xml")); 
var query = doc.Descendants("event").Elements("name").FirstOrDefault(); 

Console.WriteLine(query.Value); 
0

Это на самом деле предполагаемое поведение.

Причина в том, что он возвращает список всех элементов, соответствующих вашим критериям. Если вы точно знаете, что вы всегда будете хотеть первый элемент, вы всегда можете получить первый элемент по:

name[0].ToString() 

Однако, вы также можете добавить пустую и пустую проверку для XmlElementList, как это может также будет пустым, что приведет к получению исключения с нулевым указателем, если вы попытаетесь получить из него элемент.

 Смежные вопросы

  • Нет связанных вопросов^_^