it-swarm.com.de

XML-Knotenlesung für jede Schleife

Ich versuche, eine XML-Datei zu durchlaufen und den Wert für account in einer Nachricht anzuzeigen.

XmlNodeList nodeList = testDoc.SelectNodes("/details/row/var");
foreach (XmlNode no in nodeList)
{
   XmlNode node = testDoc.SelectSingleNode("/details/row/var[@name='account']");
   test.actual = node.Attributes["value"].Value;

   MessageBox.Show(test.account);
 }

Das Meldungsfeld zeigt derzeit wiederholt den ersten Datensatz an. Wie komme ich zum nächsten Datensatz?

Vielen Dank für Ihre Eingabe im Voraus.

7
Ebikeneser

Sie weisen node wiederholt demselben Element wie testDoc zu. Es ist nicht klar, was test.account ist (möglicherweise ein Fehler für test.actual)?

no ist die Variable, die den Inhalt von nodeList durchläuft - ich stelle mir vor, Sie wollten das verwenden.

EDITfolgende Bearbeitung von OP Jetzt haben Sie uns gezeigt, was nodeList ist. Ich vermute, Sie möchten stattdessen so etwas tun:

XmlNodeList nodeList = testDoc.SelectNodes("/details/row/var[@name='account']"); 
foreach (XmlNode no in nodeList) 
{    
   test.actual = no.Attributes["value"].Value;
   ...
13
Chris Dickson
        XmlDocument doc = new XmlDocument();
        doc.Load("d:\\test.xml");
        XmlNodeList node = doc.GetElementsByTagName("w:r");
        foreach (XmlNode xn in node)
        {
            try
            {
                if (xn["w:t"].InnerText != null)
                {
                    if (xn["w:t"].InnerText == "#")
                    {
                        string placeHolder = xn["w:t"].InnerText;
                        foreach (XmlNode a in node)
                        { 
                            if (a["w:t"].InnerText != "#")
                            {
                                string placeHolder1 = a["w:t"].InnerText;
                            }
                        } 
                    }
                }
            }

            catch (Exception e)
            {
                Console.Write(e);
            }
        } 
5
Ram

Hier ist das Beispiel für den Wert des übergeordneten Knotens, um Informationen zu den untergeordneten Knoten abzurufen. Hier verwende ich die untergeordneten Knoten ReportItems ParentNode und Print only image.

        xmldoc.Load(rdlFile);
        StringBuilder sb=new StringBuilder();
        XmlNode node = xmldoc.GetElementsByTagName("ReportItems")[0];
        XmlNodeList list = node.ChildNodes;
        atributes=new string[node.ChildNodes.Count];
        int  l = 0;
        for (int j = 0; j < node.ChildNodes.Count; j++)
        {


            if (list[j].Name == "Image")
            {
                XmlAttributeCollection att = list[j].Attributes;
                atributes[l] = att[0].Value.ToUpper();

            }
            l++;
        }
        for (int i = 0; i < node.ChildNodes.Count; i++)
        {
            if (searchText.Text.ToUpper() == atributes[i])
            {
                XmlNodeList lastlist = node.ChildNodes;
                XmlNodeList endlist = lastlist[i].ChildNodes;
                for (int k = 0; k < endlist.Count; k++)
                {
                    sb.Append(endlist[k].Name+" - "+ endlist[k].InnerText);
                    sb.Append("\n"+"\n");
                }

            }

        }

lass es mich wissen wenn du zweifel hast ..

3
Ramnivas

Versuche dies,

XmlDocument xdoc = new XDocument();

xdoc.Load("*/File/*"); 
string xmlcontents = xdoc.InnerXml;

var xpath = "(/details/row/var[@name='account'])";

XmlNodeList lists = xdoc.DocumentElement.SelectNodes(xpath);

foreach (XmlNode _node in lists)
{
    string _nodeValue = _node.InnerText;
    MessageBox.Show(_nodeValue);
}
2
user42067

Versuche Folgendes:

        //Create an xml reader;
        XmlDocument _xmlDocument = new XmlDocument();
        _xmlDocument.Load(/*File Name here*/);

        //Select the element with in the xml you wish to extract;
        XmlNodeList _nodeList = _xmlDocument.SelectNodes("/details/row/var[@name='account']");

        //Display the values in the node list to the screen;
        foreach (XmlNode _node in _nodeList)
        {
            String _nodeValue = _node.InnerText.ToString();
            MessageBox.Show(_nodeValue.ToString());
        }
1
BigCheekyBird

Ich bin nicht 100% sicher, aber Sie müssen möglicherweise die Rekursion verwenden. Wenn nicht, sollte es so aussehen:

XmlDocument doc = //etc..
foreach(XmlNode node in doc.ChildNodes)
{
    if(node.Name == "account")
    {
        MessageBox.Show(node.Value);
    }
}
0
ferr

Sie sollten keine Zeit damit verbringen, den XML-Code Knoten für Knoten zu lesen. Versuchen Sie Deserialisierung :

0
Pabuc