Frage

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

Ich habe dieses von ONet zurückgegebene XML übernommen und möchte die zu verwendenden Informationen analysieren.Hier ist der Code, den ich geschrieben habe, um zu versuchen, den inneren Text der Tags unter zu analysieren, wobei die „Eingabe“ das Onet-XML ist.

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

Ich erwarte eine NodeList der Größe vier.Wenn ich das Ergebnis jedoch ausdrucke, hat das Ergebnis eine Größe von 1:„ArchitektProjektarchitektProjektmanagerArchitekturprojektmanager“

Habe ich meine XMLNodeList titleList falsch erstellt?Wie kann ich den XML-Baum weiter durchqueren und verarbeiten, um die inneren Werte der „title“-Tags unter „also_called“ zu erhalten?

War es hilfreich?

Lösung

Sie erhalten die benannten Elemente also_called.In Ihrer Liste gibt es nur ein solches Element.Was Sie wahrscheinlich wollen, ist, die Kinder zu bekommen also_called Knoten.

Zum Beispiel:

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

Erwägen Sie auch die Verwendung XDocument und LINQ to XML statt XmlDocument - Es ist viel einfacher zu verwenden:

XDocument root = XDocument.Parse(input);

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

Andere Tipps

Sie benötigen nur ein kleines bisschen XPath.Dadurch werden alle ausgewählt title Knoten, die Kinder des ersten sind also_called.

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

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

Es kommt selten vor, dass Sie es verwenden müssen GetElementsByTagName oder ChildNodes und dergleichen und/oder versuchen Sie, einen Knoten zu inspizieren, um herauszufinden, ob es der gewünschte ist.Navigieren in XML mit XmlDocument dreht sich alles um die Verwendung XPath mit dem Sie einiges festlegen können, wenn es darum geht, Knoten zu erhalten, die bestimmte Kriterien erfüllen;sowohl hinsichtlich der Struktur innerhalb des Baums als auch hinsichtlich des Inhalts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top