//获取子节点
productname是要查找某个节点的名称
            string xpath = "root/park/product[@productname='" + productname + "']";
            XmlNode xmlnode1 = doc.SelectSingleNode(xpath);
问题是,如果productname是数字的话,就不能查找出来,如果不是数字的话就行的

解决方案 »

  1.   

    不太好实现,建议在查询前就判断productname是否为数字
      

  2.   

      //获取子节点
                if (Operation.PageValidate.IsNumber(productname.ToString())) //判断是不是数字
                {
                    xpath = "/root/park/product[@productname=" + productname + "]";
                }
                else
                xpath = "/root/park/product[@productname='" + productname + "']";
                XmlNode xmlnode1 = doc.SelectSingleNode(xpath);
    这样写还是不行的
      

  3.   

    给你做一个简单的例子,看看是不是你需要的
    <messages>
    <aa>
    123
    </aa>
    </messages>
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(stsPath);
    XmlNode ndRoot = xmlDoc.SelectSingleNode("//aa");
    string strMessage= ndRoot .InnerText.ToString();
    这个strMessage就是 123,具体的说明一下,首先你要有个XML文档的路径,就是代码中的stsPath,然后创建Document文档,导入路径,创建节点,用节点的SelectSingleNode方法去获得你需要的值,这里的//是根节点的意思,//aa表示的是根节点下的aa 然后innerText是获得值。
      

  4.   

    这跟是不是数字没关系
    把你的XML贴出来看看
      

  5.   

    <root errId="0">
    <park code="0000012112" productcount="0" ver="0">
    <product displayprice="350.0" getpoint="12" info="最美的时候" price="200.0" productCode="0001" productname="宋城一日游">
    <ticket buyNumber="2" showPrice="100.0" ticketCode="1233123" ticketKind="002001" ticketName="正门"ticketType="001001"/>
    <ticket buyNumber="1" showPrice="123.0" ticketCode="123" ticketKind="002001" ticketName="1234"ticketType="001001"/>
    </product>
    <product displayprice="0.0" getpoint="0" info="123" price="0.0" productCode="123" productname="456">
    <ticket buyNumber="12" showPrice="88.0" ticketCode="00000111" ticketKind="002001" ticketName="优票"ticketType="001001"/>
    <ticket buyNumber="9" showPrice="250.0" ticketCode="001231" ticketKind="002001" ticketName="宋城大剧院" ticketType="001003"/>
    </product>
    </park></root>
      

  6.   

    我查找宋城一日游是可以的,但是查找456就错了
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(getproduct);
                //获取子节点
                if (Operation.PageValidate.IsNumber(productname.ToString())) 
                {
                    xpath = "//root/park/product[@productname=" + productname + "]";//productname是要查找某个节点的名称 
                }
                else
                xpath = "//root/park/product[@productname='" + productname + "']";
                XmlNode xmlnode1 = doc.SelectSingleNode(xpath);
                if (xmlnode1 != null)
                {
                    foreach (XmlNode n in xmlnode1.ChildNodes)
                    {
                        DataRow dr = dt.NewRow();
                        dr["TicketName"] = n.Attributes["ticketName"].Value.ToString();
                        dr["BuyNumber"] = n.Attributes["buyNumber"].Value.ToString();
                        dr["ShowPrice"] = n.Attributes["showPrice"].Value.ToString();
                        dt.Rows.Add(dr);
                    }
                    return dt;
                }
                else return null;
      

  7.   

    XmlNode node = doc.SelectSingleNode("/root/park/product[@productname='" + productname + "']");这样是没问题的
    你跟踪调试下
    看看你传进来的productname 是否正确
      

  8.   

    楼主这两种情况是没有必要区分开的
    直接使用XmlDocument doc = new XmlDocument();
            doc.LoadXml(getproduct);
            XmlNode obj = doc.SelectSingleNode("//root/park/product[@productname='" + productname + "']");
            if (obj != null)
            {
                foreach (XmlNode n in obj.ChildNodes)
                {
                    DataRow dr = dt.NewRow();
                    dr["TicketName"] = n.Attributes["ticketName"].Value.ToString();
                    dr["BuyNumber"] = n.Attributes["buyNumber"].Value.ToString();
                    dr["ShowPrice"] = n.Attributes["showPrice"].Value.ToString();
                    dt.Rows.Add(dr);
                }
                return dt;
            }
            else return null;ps:不知道楼主这种方式用于什么地方,如果是用于数据绑定就有点多余了,可以直接通过绑定XML来实现。