Lesen Sie das XML-Attribut mit XmlDocument

79

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

Ich habe eine XML-Datei, die ungefähr so ​​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 erhalte die Werte zwischen der Verwendung von XmlDocument GetElementsByTagName()und das funktioniert wirklich gut. Ich kann einfach nicht herausfinden, wie ich die Attribute bekomme?

Alex
quelle

Antworten:

114
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["SuperString"].Value;
}
Arsen Mkrtchyan
quelle
ich danke dir sehr. es funktioniert wirklich und es braucht keine Pfade und nichts. einfach super !!
Nani
88

Sie sollten in XPath schauen . Sobald Sie es verwenden, werden Sie feststellen, dass es viel effizienter und einfacher zu codieren ist als das Durchlaufen von Listen. Außerdem können Sie direkt die gewünschten Dinge abrufen.

Dann wäre der Code ähnlich

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

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

Greg
quelle
8

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

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

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;
}

Jetzt attrValhat der Wert von ID.

Siva
quelle
5

XmlDocument.Attributesvielleicht? (Mit einer Methode GetNamedItem, die vermutlich das tut, was Sie wollen, obwohl ich die Attributsammlung immer nur iteriert habe)

jerryjvl
quelle
1

Angenommen, Ihr Beispieldokument befindet sich in der Zeichenfolgenvariablen doc

> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1
Oberst Panik
quelle
1

Wenn Ihr XML Namespaces enthält, können Sie Folgendes tun, um den Wert eines Attributs zu erhalten:

var xmlDoc = new XmlDocument();

// content is your XML as string
xmlDoc.LoadXml(content);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());

// make sure the namespace identifier, URN in this case, matches what you have in your XML 
nsmgr.AddNamespace("ns", "urn:oasis:names:tc:SAML:2.0:protocol");

// get the value of Destination attribute from within the Response node with a prefix who's identifier is "urn:oasis:names:tc:SAML:2.0:protocol" using XPath
var str = xmlDoc.SelectSingleNode("/ns:Response/@Destination", nsmgr);
if (str != null)
{
    Console.WriteLine(str.Value);
}

Mehr zu XML-Namespaces hier und hier .

Voicu
quelle