2009-06-01 15 views
67

¿Cómo puedo leer un atributo XML usando XmlDocument de C#?Leer el atributo XML usando XmlDocument

que tienen un archivo XML, que parece algo así como esto:

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

¿cómo iba a leer los atributos de XML y SuperNumber SuperString?

Actualmente estoy usando XmlDocument, y obtengo los valores intermedios usando XmlDocument's GetElementsByTagName() y eso funciona muy bien. Simplemente no puedo entender cómo obtener los atributos.

Respuesta

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

muchas gracias. realmente funciona y no necesita ningún camino ni nada. simplemente excelente! – Nani

5

XmlDocument.Attributes ¿quizás? (Que tiene un GetNamedItem método que presumiblemente va a hacer lo que quiera, aunque Siempre he iterado la colección de atributos)

81

Usted debe mirar en XPath. Una vez que empiece a usarlo, verá que es mucho más eficiente y fácil de codificar que iterar a través de las listas. También le permite obtener directamente las cosas que desea.

continuación, el código sería algo similar a

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

Puede migrar a XDocument en lugar de XmlDocument y luego usar LINQ si prefiere que la sintaxis. Algo así como:

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

Tengo una books.xml de archivo XML Programa

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

:

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 de ID.

1

Asumiendo que su documento de ejemplo se encuentra en la variable de cadena doc

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

Si el código XML contiene espacios de nombres, entonces usted puede hacer lo siguiente con el fin de 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 here y here.

0

he hecho esto:

XmlDocument d = new XmlDocument(); 
d.Load("http://your.url.here"); 
List<string> items = new List<string>(); 

foreach (XmlAttribute attr in d.DocumentElement.Attributes) 
{ 
    items.Add(attr.LocalName);     
}