C# XML中元素的子节点

C# XML中元素的子节点,c#,xml,C#,Xml,我试图编写一个应用程序来读取每一个元素,但是如果元素也有子元素来读取它们,我将给你一个我拥有的XML文件的例子 XML: Пекинез Китай Азия Комунистически щат 1904 Голяма, пропорционално по-широка, отколкото дълбока. Череп: Широк, широк и плосък между очите; не купловиден; широк между ушите. Стоп: Ясно израз

我试图编写一个应用程序来读取每一个元素,但是如果元素也有子元素来读取它们,我将给你一个我拥有的XML文件的例子

XML:


Пекинез
Китай
Азия
Комунистически щат
1904
Голяма, пропорционално по-широка, отколкото дълбока.
Череп: Широк, широк и плосък между очите; не купловиден; широк между ушите.
Стоп: Ясно изразен.
Равни устни, без да се показват зъбите или езика. Здравата долна челюсът е от съществено значение.
Със сърцевидна форма, поставени на нивото на черепа, носени плътно по главата и недостигащи под линията на муцуната. Дълъг пищен украсяващ косъм.
Големи, ясни, кръгли, тъмни и сияещи. Без видими очни проблеми.
Високо поставена, носи се плътно прилепнала, леко извита върху едната от двете страни на гърба. Дълъг украсяващ косъм.
Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят
Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят
Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят
Косъм: Козината е дълга, права, с обилна грива, простираща се извън холката, образуваща пелерина около шията. Груб покривен косъм с дебел, по-мек подкосъм. Украсяващ косъм по ушите, задната страна на крайниците, опашката и пръстите.Дължината и количеството на козината не трябва да помрачават очертанията на тялото.
https://skydrive.live.com/redir?resid=6F26B1E0D6CF648E!291
При тази порода единствено теглото се взима под внимание
5 кг
5.4 кг
正如你所见,我有一些元素,比如country,它们有子元素(country\u name,country\u continent,country\u government\u type),实际信息就在这些子元素中。所以我试图阅读它们中的每一个,但它并没有按照我希望的方式发生。 以下是我的示例代码:

XmlDocument xdoc = new XmlDocument();
xdoc.Load("D:....\\ASP_fifth_xml_file.xml");
XmlNodeList elementsList = xdoc.GetElementsByTagName("country");

    for (int i = 0; i < elementsList.Count; i++)
    {
        foreach (XmlElement element in elementsList[i].ChildNodes)
        {

            richTextOutput_TextBox.Text += element.Name +":"+ element.InnerText+"\n";
            if (element.HasChildNodes)
            {
                foreach (XmlElement subEl in element.ChildNodes)
                {
                    richTextOutput_TextBox.Text += subEl.Name + ":" + subEl.InnerText + "\n";
                }
            }

        }
        richTextOutput_TextBox.Text += "\n \n \n";
    }
XmlDocument xdoc=new XmlDocument();
Load(“D:..\\ASP_-fifth_-xml_-file.xml”);
XmlNodeList elementsList=xdoc.GetElementsByTagName(“国家”);
for(int i=0;i
当我尝试运行它时,它在
foreach(element.ChildNodes中的xmlementsubel)
所在的行上给出了一个异常。它说:

无法将类型为“System.Xml.XmlText”的对象强制转换为类型为“System.Xml.XmlElement”


将XmlElement更改为XmlNode将解决此问题。 在本例中,由于只有一个元素具有特定的标记名,因此变量elementsList将是一个节点,因为不需要循环

        XmlDocument xdoc = new XmlDocument();
        xdoc.Load("D:....\\ASP_fifth_xml_file.xml");
        XmlNode node = xdoc.SelectSingleNode("//country");
        foreach (XmlNode element in node.ChildNodes)
        {
            richTextOutput_TextBox.Text += element.Name + ":" + element.InnerText + "\n";
            if (element.HasChildNodes)
            {
                foreach (XmlNode subEl in element.ChildNodes)
                {
                    richTextOutput_TextBox.Text += subEl.Name + ":" + subEl.InnerText + "\n";
                }
            }

            richTextOutput_TextBox.Text += "\n \n \n";
        }

如果问题仍然存在,请尝试使用隐式类型变量(var)。

您的子节点包括文本节点。若要忽略它们,请使用of type()

foreach(element.ChildNodes.OfType()中的XmlNode子元素){…}

尝试用XmlNode替换XmlElement。
        XmlDocument xdoc = new XmlDocument();
        xdoc.Load("D:....\\ASP_fifth_xml_file.xml");
        XmlNode node = xdoc.SelectSingleNode("//country");
        foreach (XmlNode element in node.ChildNodes)
        {
            richTextOutput_TextBox.Text += element.Name + ":" + element.InnerText + "\n";
            if (element.HasChildNodes)
            {
                foreach (XmlNode subEl in element.ChildNodes)
                {
                    richTextOutput_TextBox.Text += subEl.Name + ":" + subEl.InnerText + "\n";
                }
            }

            richTextOutput_TextBox.Text += "\n \n \n";
        }
foreach (XmlNode subEl in element.ChildNodes.OfType<XmlElement>()){...}