C# obtenir les valeurs d'attributs xml
Comment obtenir de l'attribut "action" et "nom de fichier" valeurs " dans un droit chemin à l'aide de C#?
XML:
<?xml version="1.0" encoding="utf-8" ?>
<Config version="1.0.1.1" >
<Items>
<Item action="Create" filename="newtest.xml"/>
<Item action="Update" filename="oldtest.xml"/>
</Items>
</Config>
C#: je ne peux pas obtenir les valeurs d'attribut ainsi que la façon d'obtenir des valeurs dans les boucles foreach? Comment résoudre ce problème?
var doc = new XmlDocument();
doc.Load(@newFile);
var element = ((XmlElement)doc.GetElementsByTagName("Config/Items/Item")[0]); //null
var xmlActions = element.GetAttribute("action"); //cannot get values
var xmlFileNames= element.GetAttribute("filename"); //cannot get values
foreach (action in xmlActions)
{
//not working
}
foreach (file in xmlFileNames)
{
//not working
}
Votre exemple de code signifie beaucoup pour moi. Merci!
Vous voudrez peut-être regarder dans LINQ to XML. Il permet de travailler avec XML est beaucoup plus facile.
OriginalL'auteur user235973457 | 2013-08-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser LINQ to XML. Requête suivante renvoie fortement typé collection d'éléments avec
Action
etFileName
propriétés:désolé, faute de frappe. Il devrait être
from
au lieu defor
cela a fonctionné, merci beaucoup!
OriginalL'auteur Sergey Berezovskiy
GetElementsByTagName
trouverez vous seulement descendants directs. L'argument est censé être juste un nom de balise, pas un chemin d'accès complet de éléments de.Si vous voulez rechercher dans le document tout en fournissant une expression XPath, utilisez
SelectNodes
à la place.Pour votre document, il devrait ressembler à ceci:
J'ai ajouté l'exemplaire d'appel; je ne peux pas l'essayer dès maintenant, mais j'espère qu'il y aura pas de problème avec les espaces de noms. Si vous rencontrez des erreurs, veuillez inclure le message d'erreur exact, et je, ou quelqu'un d'autre ici, va essayer plus tard.
ok merci, j'espère que quelqu'un va l'aider à résoudre cette. 🙂
Voulez-vous dire
XmlActions
ne contient qu'un seul élément? C'est prévu, commeGetAttribute
sera de retour un seul nœud d'attribut. Si vous voulez avoir "tous les nœuds dontaction
attribut dit ...", itérer sur le résultat deSelectNodes
(collection de l'<Item>
éléments) et de récupérer lesaction
etfile
attributs de un de ces<Item>
éléments.OriginalL'auteur O. R. Mapper
Vous pouvez obtenir ce que vous demandez avec LINQ to XML:
OriginalL'auteur
Il y a un tas de problèmes avec le code dans la question:
1. Vous êtes à l'aide d'une expression XPath dans le GetElementsByTagName, il suffit d'utiliser la balise
2. Vous êtes seulement la première XmlNode dans le XmlNodeCollection en utilisant le [0]
3. Puisque vous n'avez qu'un XmlNode, vous êtes seulement une chaîne de résultat pour l'obtention de l'attribut, et non pas une collection de chaînes, qui vous sont ensuite essayer d'énumérer
4. Votre foreach est cassé, il n'y a pas de type de l'objet résultant
Voici un extrait de code qui devrait fonctionner:
Ou, si vous n'avez pas besoin de toutes les actions et les noms de fichiers dans une collection avant d'agir sur eux, vous pouvez simplement agir sur chaque action/nom de fichier dans la boucle for.
OriginalL'auteur Paul Day