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?

Antworten:


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

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.


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

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.


5

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


1

Angenommen, Ihr Beispieldokument befindet sich in der Zeichenfolgenvariablen doc

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

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.