85 Stimmen

XML-Attribute mit XmlDocument lesen

Wie kann ich ein XML-Attribut mit XmlDocument von C# lesen?

Ich habe eine XML-Datei, die in etwa wie folgt aussieht:

<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
    <Other stuff />
</MyConfiguration> 

Wie würde ich die XML-Attribute SuperNumber und SuperString lesen?

Derzeit verwende ich XmlDocument, und ich bekomme die Werte zwischen mit XmlDocument's GetElementsByTagName() und das funktioniert wirklich gut. Ich kann nur nicht herausfinden, wie ich die Attribute bekomme?

121voto

Arsen Mkrtchyan Punkte 48540
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["SuperString"].Value;
}

91voto

Greg Punkte 2179

Sie sollten sich informieren über XPath . Wenn Sie einmal damit angefangen haben, werden Sie feststellen, dass es viel effizienter und einfacher zu programmieren ist als die Iteration durch Listen. Außerdem können Sie damit direkt die Dinge abrufen, die Sie wollen.

Dann würde der Code in etwa so lauten

string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;

Beachten Sie, dass XPath 3.0 am 8. April 2014 eine W3C-Empfehlung wurde.

8voto

Matt Sherman Punkte 8013

Sie können zu XDocument anstelle von XmlDocument migrieren und dann Linq verwenden, wenn Sie diese Syntax bevorzugen. Etwa so:

var q = (from myConfig in xDoc.Elements("MyConfiguration")
         select myConfig.Attribute("SuperString").Value)
         .First();

8voto

siva Punkte 81

Ich habe eine Xml-Datei books.xml

<ParameterDBConfig>
    <ID Definition="1" />
</ParameterDBConfig>

Programm:

XmlDocument doc = new XmlDocument();
doc.Load("D:/siva/books.xml");
XmlNodeList elemList = doc.GetElementsByTagName("ID");     
for (int i = 0; i < elemList.Count; i++)     
{
    string attrVal = elemList[i].Attributes["Definition"].Value;
}

Ahora, attrVal hat den Wert von ID .

5voto

jerryjvl Punkte 18807

XmlDocument.Attributes vielleicht? (Die eine Methode GetNamedItem hat, die vermutlich das tut, was Sie wollen, obwohl ich immer nur die Attributsammlung iteriert habe)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X