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?
c#
.net
xml
xmldocument
Alex
quelle
quelle
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.
quelle
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();
quelle
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
attrVal
hat der Wert vonID
.quelle
XmlDocument.Attributes
vielleicht? (Mit einer Methode GetNamedItem, die vermutlich das tut, was Sie wollen, obwohl ich die Attributsammlung immer nur iteriert habe)quelle
Angenommen, Ihr Beispieldokument befindet sich in der Zeichenfolgenvariablen
doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber") 1
quelle
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 .
quelle