获取父属性值xml

时间:2011-06-17 06:15:03

标签: c# xml

我有一个像这样的xml文件

  

< insrtuction name = inst1>

     

< destnation>
  <连接> con 1的   < /连接>   < /目的地>

     

< destnation>
  <连接> CON2   < /连接>   < /目的地>

     

< /指令>

     

< insrtuction name = inst2>

     

< destnation>
  <连接> CON3   < /连接>   < /目的地>

     

< destnation>
  <连接> CON4   < /连接>   < /目的地>

     

< /指令>

我必须得到所有的联系。我编写的代码

    private void button5_Click(object sender, EventArgs e)
    {
        xml = new XmlDocument();
        xml.Load("D:\\connections.xml");
        string text = "";
        XmlNodeList xnList = xml.SelectNodes("/instruction/destination");
        foreach (XmlNode xn in xnList)
        {
            string configuration = xn["connection"].InnerText;               
            text = text + configuration + "\r\n" + "\r\n";
        }
        textBox1.Text=text;
    }        

我得到的输出是

con1
con2
con3
con4

根据我的新要求,输出应该是

Instruction Name : inst1
connection: con1
connection: con1
Instruction Name : inst2
connection: con3
connection: con4

我是.net的新手,我正在使用2.0框架工作,我不能使用LINQ。感谢

3 个答案:

答案 0 :(得分:2)

尝试这样:

    xml = new XmlDocument();
    xml.Load("D:\\connections.xml");
    string val="";
    string text = "";
    foreach (XmlNode child in xml.DocumentElement.ChildNodes)
        {
            if (child.NodeType == XmlNodeType.Element)
            {
                //MessageBox.Show(child.Name + ": " + child.InnerText.ToString());
                node = child.Name; //here you will get node name
                if (node.Equals("Instruction"))
                {
                    val = child.InnerText.ToString(); //value of the node
                    //MessageBox.Show(node + ": " + val);
                }
            }
        }

答案 1 :(得分:1)

这样的事情,有一个内循环:

        XmlNodeList xnList = xml.SelectNodes("/instruction");
        foreach (XmlElement xn in xnList)
        {
            text += "Instruction Name : " + xn.GetAttribute("name") + Environment.NewLine + Environment.NewLine;
            foreach (XmlElement cn in xn.SelectNodes("connection"))
            {
                text += "Connection : " + xn.InnerText + Environment.NewLine + Environment.NewLine;
            }
        }

答案 2 :(得分:1)

你可以这样写:

private void button5_Click(object sender, EventArgs e)
{
    xml = new XmlDocument();
    xml.Load("D:\\connections.xml");
    StringBuilder sb = new StringBuilder();
    XmlNodeList xnList = xml.SelectNodes("/instruction");
    foreach (XmlNode xn in xnList)
    {
        sb.AppendLine(xn.Attribute["name"].Value);
        foreach(XmlNode subNodes in xn.SelectNodes("destination/connection") {
            sb.AppendLine(subNodes.InnerText);
        }
    }
    textBox1.Text=sb.ToString();
}     

但是,我认为这是一个很容易解决的问题。这里没有技术挑战。我建议你参加培训,阅读一本书并深入了解文档。

PS:不是使用StringBuilder而不是字符串连接......