2016-08-08 3 views
0

ich ein XML-Dokument, das wie diesesGetElementByTagName kehrt 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> 

ich diese Felder greifen wollen aussieht und zeigt sie in ASP:Labels

Das ist mein Code hinter

ist
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(); 
    } 

Aber das ist, was es auf dem Etikett

anzeigt

Nicht wirklich sicher, was ich falsch mache.

Antwort

1

Wie der Name könnte und vorschlagen, wie the documentation tells you, gibt die Methode:

Eine XmlNodeList eine Liste aller passenden Knoten. Wenn keine Knoten mit dem Namen übereinstimmen, ist die zurückgegebene Sammlung leer.

Sie müssen diese Liste zu durchlaufen, oder einfach das erste Element nehmen, wenn Sie sicher sind, dass man immer da sein:

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

Das heißt, LINQ to XML eine weit schönere API ist, ich würde Sie definitiv ermutigen, mehr darüber zu erfahren:

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

Ich bin mir nicht sicher, wie man Linq zu XML verwendet. Ich habe versucht, diese mit 'System.Xml.Linq;' aber es sagt, es existiert nicht – onTheInternet

+0

@onTheInternet Sie müssen auch Targeting.NET 3.5 oder höher sein und einen Verweis auf 'System.Xml.Linq.dll' haben (überprüfen Sie den 'Referenzen' Teil Ihres Projektbaums, Sie kann mit der rechten Maustaste klicken und eine Referenz hinzufügen, wenn sie fehlt. –

+0

Ich benutze LINQ jetzt (die Referenz fehlte. Danke. Ich dachte, ich musste es durch nugget hinzufügen) und es ist einfacher zu folgen. Vielen Dank Charles – onTheInternet

0

versuchen auf diese Weise

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

Console.WriteLine(query.Value); 
0

Dies ist eigentlich das beabsichtigte Verhalten.

Der Grund dafür ist, dass es eine Liste aller Elemente zurückgibt, die Ihren Kriterien entsprechen. Wenn Sie sicher ist, dass Sie immer das erste Element wollen würden, könnten Sie immer das erste Element erhalten von:

name[0].ToString() 

Allerdings könnten Sie auch einig null und leere Prüfung für den XmlElementList hinzufügen mögen, wie kann es Seien Sie auch leer, was dazu führt, dass Sie eine Nullzeiger-Ausnahme erhalten, wenn Sie versuchen, ein Element davon zu bekommen.