c# - obtener - Leer el atributo XML usando XmlDocument
obtener valor de un atributo xml c# (7)
¿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 intermedios usando XmlDocument''s GetElementsByTagName()
y eso funciona muy bien. Simplemente no puedo entender cómo obtener los atributos.
Deberías 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.
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 W3C el 8 de abril de 2014.
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();
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);
}
Suponiendo que su documento de ejemplo está en la variable de cadena doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1
Tengo un Xml File 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 de ID
.
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)
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
string attrVal = elemList[i].Attributes["SuperString"].Value;
}