Question

<career code="17-1011.00">
   <code>17-1011.00</code>
   <title>Architects</title>
   <tags bright_outlook="false" green="true" apprenticeship="false" />
   <also_called>
      <title>Architect</title>
      <title>Project Architect</title>
      <title>Project Manager</title>
      <title>Architectural Project Manager</title>
   </also_called>
   <what_they_do>Plan and design structures, such as private residences, office buildings, theaters, factories, and other structural property.</what_they_do>
   <on_the_job>
      <task>Consult with clients to determine functional or spatial requirements of structures.</task>
      <task>Prepare scale drawings.</task>
      <task>Plan layout of project.</task>
   </on_the_job>
</career>

J'ai récupéré ce XML renvoyé par ONet et j'aimerais analyser les informations à utiliser.Voici le code que j'ai écrit pour essayer d'analyser le texte interne des balises sous, l'entrée étant le XML Onet.

 XmlDocument inputXML = new XmlDocument();
        inputXML.LoadXml(input);
        XmlElement root = inputXML.DocumentElement;
        XmlNodeList titleList = root.GetElementsByTagName("also_called");
        for (int i = 0; i < titleList.Count; i++)
        {
            Console.WriteLine(titleList[i].InnerText);
        } 

J'attends une NodeList de taille quatre.Cependant, lorsque j'imprime le résultat, le résultat est une taille de 1 :"ArchitecteArchitecte de projetChef de projetChef de projet architectural"

Ai-je mal construit ma liste de titres XMLNodeList ?Comment puis-je parcourir et traiter davantage l'arborescence XML pour obtenir les valeurs internes des balises « titre » sous « aussi_appelé » ?

Était-ce utile?

La solution

Vous obtenez les éléments nommés also_called.Il n'y a qu'un seul élément de ce type dans votre liste.Ce que vous voulez probablement, c'est amener les enfants du also_called nœud.

Par exemple:

XmlNodeList also_calledList = root.GetElementsByTagName("also_called");
XmlNode also_calledElement = also_calledList[0];
XmlNodeList titleList = also_calledElement.ChildNodes;

foreach (XmlNode titleNode in titleList)
{
    Console.WriteLine(titleNode.InnerText);
}

Pensez également à utiliser XDocument et LINQ to XML au lieu de XmlDocument - c'est beaucoup plus simple à utiliser :

XDocument root = XDocument.Parse(input);

foreach (XElement titleNode in root.Descendants("also_called").First().Elements())
{
    Console.WriteLine(titleNode.Value);
}

Autres conseils

Vous avez juste besoin d'un tout petit peu de XPath.Ceci sélectionne tous les title nœuds qui sont les enfants du premier also_called.

        XmlDocument inputXML = new XmlDocument();
        inputXML.LoadXml(input);

        foreach(var node in root.SelectNodes("also_called[1]/title"))
        {
            Console.WriteLine(node.InnerText);
        } 

Il est rare que vous ayez besoin d'utiliser GetElementsByTagName ou ChildNodes et leurs semblables et/ou essayez d'inspecter un nœud afin de déterminer si c'est celui que vous voulez.Naviguer dans XML avec XmlDocument il s'agit avant tout d'utiliser XPath avec lequel vous pouvez spécifier un peu lorsqu'il s'agit d'obtenir des nœuds qui répondent à des critères spécifiques ;à la fois en termes de structure au sein de l’arborescence et de contenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top