¿Cómo puedo leer un atributo XML usando XmlDocument de C #?
Tengo un archivo XML que se parece a esto:
<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
<Other stuff />
</MyConfiguration>
¿Cómo leería los atributos XML SuperNumber y SuperString?
Actualmente estoy usando XmlDocument, y obtengo los valores entre el uso de XmlDocument GetElementsByTagName()
y eso funciona muy bien. ¿Simplemente no puedo averiguar cómo obtener los atributos?
c#
.net
xml
xmldocument
Alex
fuente
fuente
Debería buscar en XPath . Una vez que comience a usarlo, encontrará que es mucho más eficiente y más fácil de codificar que iterar por listas. También le permite obtener directamente las cosas que desea.
Entonces el código sería algo similar a
string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;
Tenga en cuenta que XPath 3.0 se convirtió en una recomendación del W3C el 8 de abril de 2014.
fuente
Puede migrar a XDocument en lugar de XmlDocument y luego usar Linq si prefiere esa sintaxis. Algo como:
var q = (from myConfig in xDoc.Elements("MyConfiguration") select myConfig.Attribute("SuperString").Value) .First();
fuente
Tengo un archivo Xml books.xml
<ParameterDBConfig> <ID Definition="1" /> </ParameterDBConfig>
Programa:
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
tiene el valor deID
.fuente
XmlDocument.Attributes
¿quizás? (Que tiene un método GetNamedItem que presumiblemente hará lo que quieras, aunque siempre he iterado la colección de atributos)fuente
Suponiendo que su documento de ejemplo está en la variable de cadena
doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber") 1
fuente
Si su XML contiene espacios de nombres, puede hacer lo siguiente para obtener el valor de un atributo:
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); }
Más sobre espacios de nombres XML aquí y aquí .
fuente