J'essaie de trouver une façon facile et lisse de faire la demande suivante.Analyser les balises optionnelles en C#
J'ai un message XML avec cet arrangement:
<persons>
<person>
<firstName>Mike</firstName>
<middleName>K.</middleName>
<lastName>Kelly</lastName>
</person>
<person>
<firstName>Steve</firstName>
<lastName>David</lastName>
</person>
<person>
<firstName>Laura</firstName>
<middleName>X.</middleName>
<lastName>Xavier</lastName>
</person>
</persons>
Je veux analyser ce XML en utilisant des expressions XPath.
persons/person/firstName
persons/person/middleName
persons/person/lastName
Mon objectif est de stocker des valeurs d'étiquette prenom, middleName et nom comme celui-ci dans une liste d'objets à cordes comme ceci:
firstNameList[0] = "Mike";
firstNameList[1] = "Steve";
firstNameList[2] = "Laura";
middleNameList[0] = "K.";
middleNameList[1] = null;
middleNameList[2] = "X.";
lastNameList[0] = "Kelly";
lastNameList[1] = "David";
lastNameList[2] = "Xavier";
Dans mon code C#, je fais ceci:
XmlNodeList firstNameNodeList = xmlDoc.SelectNodes("persons/person/firstName", nsmgr);
XmlNodeList middleNameNodeList = xmlDoc.SelectNodes("persons/person/middleName", nsmgr);
XmlNodeList lastNameNodeList = xmlDoc.SelectNodes("persons/person/lastName", nsmgr);
Le problème avec ce code est que pour le deuxième prénom, je ne l'ai pas pour la deuxième personne dans ma liste XML. Donc le nomNoeudNomDeListe renvoie 2 valeurs (K. et X.) mais je ne saurais pas si le deuxième prénom de la première ou deuxième ou troisième personne est manquant.
J'espérais que l'API SelectNodes() fournirait un itération ou un index ID en tant qu'élément répétitif ayant une valeur donnée.
S'il vous plaît me suggérer un moyen le plus facile de réaliser ce dont j'avais besoin? Merci beaucoup pour votre aide, JK
pouvez-vous avoir pour personne sans prénom? –
@StackOverflowException, c'est une bonne idée. Dans ce cas, SelectNodes() renverrait-il 3 valeurs dans cet exemple? K., null et X.? J'ai besoin de l'expérimenter. – JKK
oui. le second nomMoyen ne sera pas nul mais le 'InnerXml' de' XmlNodeList' serait vide. Voir ma réponse :) –