[C#] XML -> SelectSingleNode
-
Servus,
ich habe hier ein kleines Problem.
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml("<?xml version='1.0'?><root><person><name>Martin Fowler</name></person><person><name>Kent Beck</name></person><person><name>Dave Astels</name></person></root>"); XmlElement rootNode = xmlDoc.DocumentElement; XmlNodeList dailyProfileNodeList = rootNode.SelectNodes("//person"); string name = string.Empty; foreach (XmlNode xmlNode in dailyProfileNodeList) { name = xmlNode.SelectSingleNode("//name").InnerText; name += ";"; }
Ich selektiere also alle Elemente "<person>" aus dieser XML Datei und schmeiße diese in eine NodeList. Jetzt versuche ich auf jedes Element (XmlNode) in dieser Liste ein SelectSingleNode anzuwenden. Dadurch erhoffe ich mir das ich NUR das Element "<name>" aus dem aktuellen selektierten Element "<person>" bekomme. Allerdings musste ich feststellen, sobald ich ein SelectSingleNode aufrufe, dass er mir durch die GANZE XML Struktur durchparst und mir natürlich das erste gefundene Element wieder zurück gibt. Das bedeutet in diesem Fall das der string "name" immer "Mark Fowler" ist. Irgendwie stehe ich hier gerade tierisch auf dem Schlauch, da ich mir eigentlich dachte, dass er das Element "<name>" immer vom aktuellen Node mir liefert.
1. Frage: Liege ich mit meiner Annahme richtig, dass er mir immer die komplette Struktur durcheiert? Denn führe ich ein "xmlNode.SelectNodes(...)" aus, so werden mir alle Elemente der XML Struktur wiedergegeben.
2. Frage: Wie kann ich am komfortabelsten an dieses Problem herantreten, um dieses zu beseitigen, ohne jedes Element einzeln auszulesen? (gillt nur wenn die erste Frage mit "ja" beantwortet wird)
Vielleicht hat jemand ein Idee, würde mich freuen.
mfg
Hellsgore
-
Hallo,
bin auch kein XPath Xperte aber probier mal so:name = xmlNode.SelectSingleNode(".//name").InnerText;
MfG
-
Ich liebe dich mein Sahnetörtchen...
Danke
Hellsgore
-
Hallo zusammen,
wie bekomme ich den Text von NAME, wenn meine XML so aussieht :
<?xml version="1.0" ?> <xml> <adresse> <row NAME="Brathering" VORNAME="Knut"/> </adresse> </xml>
?
DankeDer Code sieht im Moment aehnlich wie oben aus
-
Servus,
XmlElement rootNode = xmlDoc.DocumentElement; XmlNodeList dailyProfileNodeList = rootNode.SelectNodes(".//row"); foreach (XmlNode xmlNode in dailyProfileNodeList) { string attrib = xmlNode.Attributes.GetNamedItem("NAME").InnerText; }
schau dir mal Attributes an. Da sind alle drin *g*
mfg
Hellsgore
-
Jup, danke Dir.
-
...
-
Hallo,
ich habe ein ganz ähnliches Problem und hoffe auch auf Eure Hilfe:
try { MessageBox.Show(request); string response = myWebHandler.executeRPC(request); XmlDocument myXMLDoc = new XmlDocument(); myXMLDoc.LoadXml(response); MessageBox.Show(response); XmlElement rootNode = myXMLDoc.DocumentElement; BKMBox.Text = rootNode.SelectSingleNode(".//adBKMURL").InnerText; } catch (Exception ex) { ResultBox.Text = ex.Message; }
Leider schreibt sich nix in die BKMBox zurück sondern nur die Exception der ResultBox: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt".
Was kann ich tun?