访问xml中的子节点

时间:2014-04-14 06:31:19

标签: c# xml

我有像这样的xml

<abcd>
    <abcd1>
        <hgjh>txt</hgjh>
        <addedit>true</addedit>
        <Db>txtDB</DB>
        <server>ser</server>
    </abcd1>
    <abcd1>
        <hgjh>txt</hgjh>
        <addedit>false</addedit>
        <Db>txtDB</DB>
        <server>ser</server>
    </abcd1>
</abcd>

现在基于addedit标志值,如果为true,我需要显示xml中任意数量节点的数据库名称和服务器名称。我已将其中两个作为参考。 请帮我解决这个问题。我在C#中尝试了很多无法达到所需功能的代码。

2 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助:

     XmlDocument Xmlabcd= new XmlDocument();
            Xmlabcd.LoadXml(xml); //xml=your xml
            foreach (XmlNode v in Xmlabcd.ChildNodes)
            {
                if ( v.ChildNodes.Count > 0)
                {
                    bool addedit=false;
                    string DBName=string.Empty;
                    string serverName=string.Empty;
                    foreach (XmlNode child in v.ChildNodes)
                    {
                        if (child.Name.Equals("addedit") )
                        {
                            addedit=child.InnerText=="true"?true:false;
                        }
                        if(child.Name.Equals("Db"))
                        {
                        DBName=child.InnerText;
                        }
                        if(child.Name.Equals("server"))
                        {
                        serverName=child.InnerText;
                        }
                    }

                    //Code to Show Db and server or to add it to one list based on bool addedit(variable) value
                }
            }

答案 1 :(得分:0)

有一个错误。打开“Db”不匹配关闭“DB”。

您可以使用XPath选择具有addedit = true

的节点
var list = xmlDoc.DocumentElement.SelectNodes("abcd1[addedit='true']");

foreach (XmlNode node in list)
{
    Console.WriteLine(node.SelectSingleNode("DB").InnerText);
    Console.WriteLine(node.SelectSingleNode("server").InnerText);
}