Comment puis-je accéder à un élément XML de la valeur à l'aide de C#.net des pages web avec WebMatrix?
J'ai regardé beaucoup de ressources, fait beaucoup de recherche, et essayé de nombreux "best-devine" pour accéder à un élément unique à l'aide de WebMatrix avec C#, web-pages, mais rien de ce que je suis en train est de passer à travers.
Envisager un simple document xml qui ressemble à ceci:
<root>
<requisitionData>
<element1>I am element 1</element1>
<element2>I am element 2</element2>
</requisitionData>
</root>
Je sais que je peux utiliser une boucle foreach, comme suit:
@using System.Xml.Linq
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
foreach (XElement element in doc.Descendants("requisitionData"))
{
@element.Value
}
Et que, bien sûr, fonctionne très bien. Mais si je voulais simplement stocker le seul élément, <element1>
'valeur dans une variable de chaîne?
J'ai regardé ici (lien ci-dessous), mais je ne peux pas faire des têtes ou queues de ce code (il est à peine ressemble même le C# pour moi, mais encore une fois, je suis donc de nouveau à l'analyse de XML...):
J'ai aussi vérifié ici: Comment Obtenir Nœud XML à partir de XDocument
Mais le code ci n'a pas de sens pour moi ici. Je continue à penser que il doit y avoir un moyen plus simple de faire cela, espérons-le, sans l'apprentissage d'une toute nouvelle interrogation approche.
---------------------------------LES CHOSES QUE J'AI ESSAYÉ---------------------------------
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
string element = doc.Descendants("requisitionData").Descendants("element1").Value;
Erreur que je reçoit: "manquant directive using ou une référence d'assembly
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
XElement element = doc.Descendants("element1");
string val = element.Value;
Erreur que je reçoit: Impossible de convertir implicitement le type de Système.Les Collections.Génériques.IEnumerable' à 'Système.Xml.Linq.XElement'. Une conversion explicite existe (vous manque un plâtre?)
J'ai, en effet, essayé d'autres choses, mais je obtenir à peu près les mêmes erreurs, comme indiqué ci-dessus. Ai-je fait ce plus difficile qu'elle ne l'est, ou suis-je trop simplifier?
-------------------------Mise à JOUR------------------------------
J'ai pu obtenir que cela fonctionne:
string element = doc.Element("root").Element("requisitionData").Element("element1").Value;
@element
Cependant, une chose qui m'inquiète à propos de cette approche est que .Element
sélectionne que de la première de match, de sorte que dans un document xml qui ressemble à ceci:
<root>
<requisitionData>
<element1>I am element 1</element1>
<element2>I am element 2</element2>
</requisitionData>
<requisitionData>
<element1>I am element 1</element1>
<element2>I am element 2</element2>
</requisitionData>
</root>
Comment pourrais-je accéder à la deuxième occurrence de <element1>
?
OriginalL'auteur VoidKing | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
ou avec XPath:
Mise à JOUR:
Et si vous vouliez sélectionner par exemple la deuxième
<element1>
nœud de mise à jour de votre exemple:Aussi, je ne vois pas en quoi cela sélectionne un élément unique. Il n'y a plus d'un résultat qui sera itérer, compte tenu de la boucle foreach conditions.
Qui nœud particulier dans le XML voulez-vous? Vous pouvez utiliser XPath exemple, j'ai indiqué dans ma réponse à obtenir n'importe quel nœud spécifique que vous aimez. Par exemple si vous voulez pour obtenir la valeur de la première
<element1>
nœud que vous auriez écritstring value = doc.XPathSelectElements("//requisitionData/element1").First().Value;
.Certes, je n'ai aucun problème à étudier XPath, mais permettez-moi d'exprimer mes pensées de cette façon: Si je voulais faire de ce "côté client" (dont je n'ai vraiment pas), je pourrais simplement utiliser jQuery(CSS) sélecteur de saisir d'un seul élément par son id, ou de saisir les multiples de la classe (ou le nom de la balise) et itérer à travers eux à l'aide .longueur. J'ai l'impression d'avoir le plein contrôle sur la façon dont les éléments que je veux pour choisir et rassembler les données. J'aimerais atteindre ce niveau de contrôle "côté serveur", si possible (je suis sûr que c'est, au moins avec XPath, même si elle peut ne pas être aussi simple).
Jusqu'à ce que vos exemples, cependant, je n'avais aucune idée de comment l'utiliser XPath avec C#.net, donc, encore une fois, je vous en remercie!
OriginalL'auteur Darin Dimitrov