有XML格式如下:
<ActiveReportsLayout Version="4">
   <Object type="DataDynamics.ActiveReports.TextBox" name="TextBox1">
       <Property name="DataField">货物名称-1</Property> 
       </Object>
   <Object type="DataDynamics.ActiveReports.TextBox" name="TextBox1">
       <Property name="DataField">货物名称-2</Property> 
       </Object>
   <Object type="DataDynamics.ActiveReports.TextBox" name="TextBox1">
       <Property name="DataField">货物名称-3</Property> 
       </Object>我现在要读取所有的Property 节点的 name = “DataField”的 value 即是上面的货物名称-1、 货物名称-2、 货物名称-3;
该怎么读取呢?

解决方案 »

  1.   


                    List<string> items=new List<string>();
    XmlDocument doc=new XmlDocument();
    doc.Load("demo.xml");
    IterateNode(doc.DocumentElement); protected void IterateNode(XmlNode node)
    {
    if(node==null)return;
    if(node.NodeType== XmlNodeType.Element)
    {
    if(node.Name=="Object")
    {
    ParseObjNode(node);
    }
    }

    foreach(XmlNode child in node.ChildNodes)
    {
    IterateNode(child);
    }
    }

    protected void ParseObjNode(XmlNode node)
    {
    if(node==null)return;

    foreach(XmlNode child in node.ChildNodes)
    {
    if(child.Name=="Property")
    {
    string name=GetAttributeBy(child,"name");
    if(name=="DataField")
    {
    items.Add(child.InnerText);
    }
    }
    }
    }

    protected string GetAttributeBy(XmlNode node, string attr)
    {
    if(node==null)return "";
    if(attr==null||attr.Trim()=="")return "";

    if(node.Attributes[attr]!=null)
    return node.Attributes[attr].Value;
    return "";
    }
      

  2.   

            public static XmlNodeList GetAllNodes(string _filename)
            {
                System.Xml.XmlDocument xdom = new System.Xml.XmlDocument();
                xdom.Load(_filename);
                System.Xml.XmlNodeList xnl = xdom.SelectNodes("//Property[@name='DataField']");
                return xnl;
            }//调用
    XmlNode xn = xnl[0];
    string str1 = xn.InnerText; //str1 = "货物名称-1"
      

  3.   

            List<string> values = new List<string>();
            for (int i = 0; i < root.ChildNodes.Count; i++)
            {
                XmlNode node = root.ChildNodes[i];
                for (int j = 0; j < node.ChildNodes.Count; j++)
                {
                    XmlNode node2 = node.ChildNodes[j];
                    if (node2.Attributes["name"] != null && node2.Attributes["name"].Value == "DataField")
                    {
                        values.Add(node2.InnerText);
                    }
                }
            }这样不就行了吗