Domanda

<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>
.

Ho preso questo XML restituito da Onet e vorrei analizzare le informazioni da utilizzare. Ecco il codice che ho scritto per provare e analizzare il testo interno dei tag sotto, con l'input "essere l'ONET XML.

 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);
        } 
.

Mi aspetto un nodelancio di dimensioni quattro.Tuttavia, quando stampando il risultato, il risultato è una dimensione di 1: "ArchitettoProject ArchitectProject managerArchitectural Project manager"

Ho costruito il mio titolatore del mio XMLNODELIST sbagliato?Come posso attraversare ulteriormente ed elaborare l'albero XML per ottenere i valori interni dei tag "titolo" in "anche_Called"?

È stato utile?

Soluzione

Ottieni gli elementi denominati also_called.C'è solo uno di questi elementi nella tua lista.Quello che probabilmente vuoi è ottenere i figli del nodo also_called.

Ad esempio:

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);
}
.

Inoltre, prendere in considerazione l'utilizzo di XDocument e LINQ a XML invece di XmlDocument - è molto semplice da usare:

XDocument root = XDocument.Parse(input);

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

Altri suggerimenti

Hai solo bisogno di un picco di xpath.Ciò seleziona tutti i nodi title che sono figli del primo also_called.

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

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

È raro che avresti bisogno di utilizzare GetElementsByTagName o ChildNodes e il loro ILK e / o provare a ispezionare un nodo per capire se è quello che desideri.La navigazione XML con XmlDocument è tutto sull'utilizzo di xpath con cui è possibile specificare un bel po 'quandoarriva ad ottenere nodi che soddisfano criteri specifici;sia in termini di struttura all'interno dell'albero che del contenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top