簡體   English   中英

XML中元素的子節點

[英]Child nodes of an element in XML

我正在嘗試編寫一個應用程序來讀取每個元素,但是如果元素有子元素也可以讀取它們。我將給出一個XML文件示例

XML:

<fci>
    <dog_breeds>

        <dog_breed standart_number="SN207" group="GR9" section="S9.8">
            <name>Пекинез</name>
            <country country_code="CHN" capital="Beijing" official_language="Chinesse" time_zone = "UTC/GMT +8 hours"  currency="Chinese Yuan">
                <country_name>Китай</country_name>
                <country_continent>Азия</country_continent>
                <country_government_type>Комунистически щат</country_government_type>
            </country>
            <year_of_establishment>1904</year_of_establishment>
            <head>
                Голяма, пропорционално по-широка, отколкото дълбока.
                Череп: Широк, широк и плосък между очите; не купловиден; широк между ушите.
                Стоп: Ясно изразен.
            </head>
            <teeth>
                Равни устни, без да се показват зъбите или езика. Здравата долна челюсът е от съществено значение.
            </teeth>
            <ears>
                Със сърцевидна форма, поставени на нивото на черепа, носени плътно по главата и недостигащи под линията на муцуната. Дълъг пищен украсяващ косъм.
            </ears>
            <eyes>
                Големи, ясни, кръгли, тъмни и сияещи. Без видими очни проблеми.
            </eyes>
            <tail>
                Високо поставена, носи се плътно прилепнала, леко извита върху едната от двете страни на гърба. Дълъг украсяващ косъм.
            </tail>
            <colors>
                <primary_color> Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят</primary_color>
                <secondary_color> Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят</secondary_color>
                <prefered_color> Всички цветове и петна се допустими и еднакво ценени, с изключение на албинизъм или чевенокафяв цвят</prefered_color>
            </colors>
            <fur>
                Косъм: Козината е дълга, права, с обилна грива, простираща се извън холката, образуваща пелерина около шията. Груб покривен косъм с дебел, по-мек подкосъм. Украсяващ косъм по ушите, задната страна на крайниците, опашката и пръстите.Дължината и количеството на козината не трябва да помрачават очертанията на тялото.
            </fur>
            <image>https://skydrive.live.com/redir?resid=6F26B1E0D6CF648E!291</image>
            <size>
                <males_size>При тази порода единствено теглото се взима под внимание</males_size>
                <females_size></females_size>
            </size>
            <weight>
                <males_weight>5 кг</males_weight>
                <females_weight>5.4 кг</females_weight>
            </weight>
        </dog_breed>
</fci>

正如你所看到的,我有像國家這樣的元素,其中包含子元素(country_name,country_continent,country_government_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";
    }

當我嘗試運行它時,它在foreach (XmlElement subEl in element.ChildNodes)所在的行上給出了一個例外。 它說:

無法將類型為“System.Xml.XmlText”的對象強制轉換為“System.Xml.XmlElement”。

將XmlElment更改為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)。

您的ChildNodes包括文本節點。 如果要忽略它們,請使用OfType <XmlElement>()

foreach (XmlNode subEl in element.ChildNodes.OfType<XmlElement>()){...}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM