Comment lire un attribut XML à l'aide de XmlDocument de C #?
J'ai un fichier XML qui ressemble à ceci:
<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
<Other stuff />
</MyConfiguration>
Comment pourrais-je lire les attributs XML SuperNumber et SuperString?
Actuellement, j'utilise XmlDocument et j'obtiens les valeurs entre l'utilisation de GetElementsByTagName()
de XmlDocument et cela fonctionne vraiment bien. Je n'arrive pas à comprendre comment obtenir les attributs?
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
string attrVal = elemList[i].Attributes["SuperString"].Value;
}
Vous devriez regarder dans XPath . Une fois que vous aurez commencé à l’utiliser, vous constaterez qu’il est beaucoup plus efficace et plus facile à coder que de parcourir des listes. Il vous permet également d’obtenir directement ce que vous voulez.
Ensuite, le code serait quelque chose de similaire à
string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;
Notez que XPath 3.0 est devenu une recommandation du W3C le 8 avril 2014.
Vous pouvez migrer vers XDocument au lieu de XmlDocument, puis utiliser Linq si vous préférez cette syntaxe. Quelque chose comme:
var q = (from myConfig in xDoc.Elements("MyConfiguration")
select myConfig.Attribute("SuperString").Value)
.First();
J'ai un fichier XML books.xml
<ParameterDBConfig>
<ID Definition="1" />
</ParameterDBConfig>
Programme:
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;
}
Maintenant, attrVal
a la valeur de ID
.
XmlDocument.Attributes
peut-être? (Qui a une méthode GetNamedItem qui fera probablement ce que vous voulez, même si j'ai toujours juste itéré la collection d'attributs)
Si votre XML contient des espaces de noms, vous pouvez procéder comme suit pour obtenir la valeur d'un attribut:
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);
}
Plus d'informations sur les espaces de noms XML ici et ici .
En supposant que votre exemple de document se trouve dans la variable chaîne doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1