比如有一个xml文档如下Students.xml:
<?xml version="1.0" encoding="utf-8"?>
<Students>
  <Student>
    <sno>95001</sno>
    <sname>李勇</sname>
    <ssex>M</ssex>
    <sage>22</sage>
    <sdept>CS</sdept>
  </Student>
  <Student>
    <sno>95002</sno>
    <sname>刘晨</sname>
    <ssex>F</ssex>
    <sage>19</sage>
    <sdept>IS</sdept>
  </Student>
  <Student>
    <sno>95003</sno>
    <sname>王敏</sname>
    <ssex>F</ssex>
    <sage>18</sage>
    <sdept>MA</sdept>
  </Student>
  <Student>
    <sno>95004</sno>
    <sname>张立</sname>
    <ssex>M</ssex>
    <sage>19</sage>
    <sdept>IS</sdept>
  </Student>
  <Student>
    <sno>95005</sno>
    <sname>李寻欢</sname>
    <ssex>M</ssex>
    <sage>23</sage>
    <sdept>CS</sdept>
  </Student>
</Students>
现假设有一个函数ModifyXmlNode(int studentid,int age)用来修改指定节点下的年龄,首先我要找到这个节点:
 XmlElement root = xdoc.DocumentElement;
 XmlNode mCurrentNode = root.SelectSingleNode("Student[sno=studentid]");
然而,通过调试发现,是无法找到指定sno的这个节点,估计是这个查询的语句里的等号部分有问题,应该如何写了?使用语言是C#。

解决方案 »

  1.   


    //完全是现学现用,自己转成函数吧
    //using System.Xml;
    //using System.IO;
    static void Main()
            {
                XmlDocument xmld = new XmlDocument();
                xmld.Load(Directory.GetCurrentDirectory() + "/XMLFile1.xml");
                XmlNode node = xmld.SelectSingleNode("/Students/Student[sno='95001']/sage");
                node.InnerText = "xxx";
                xmld.Save(Directory.GetCurrentDirectory() + "/XMLFile1.xml");
            }
      

  2.   

    这个是可以查到这个节点,我要的是动态传入sno,你这样是定死了某个节点,我要的是sno等于参数传入的那个值
      

  3.   

    XmlDocument xmlDoc=new XmlDocument(); 
    xmlDoc.Load(Server.MapPath("a.xml") ); 
    XmlNodeList nodeList=xmlDoc.SelectSingleNode("").ChildNodes;
    foreach(XmlNode xn in nodeList)

    XmlElement xe=(XmlElement)xn;
    XmlNodeList nls=xe.ChildNodes;
    foreach(XmlNode xn1 in nls)

    XmlElement xe2=(XmlElement)xn1;
    if(xe2.Name=="") 

    xe2.InnerText="";



    xmlDoc.Save( Server.MapPath("a.xml") );
      

  4.   

    XmlNode Node = xmltest.SelectSingleNode("/Students/Student[sno='" + id + "']");
      

  5.   

    我是用4楼的遍历比较来做的,觉得麻烦。
    5楼的方法在oracle中能否通过,我需要去测一下!
    谢谢提供思路!
      

  6.   

    晕!难道你知道把sno写成参数吗?public void Modify(int studentid,int age)        {
                XmlDocument xmld = new XmlDocument();
                xmld.Load(Directory.GetCurrentDirectory() + "/XMLFile1.xml");
                XmlNode node = xmld.SelectSingleNode("/Students/Student[sno='"+studentid.ToString()+"']/sage");
                node.InnerText = age.ToString();
                xmld.Save(Directory.GetCurrentDirectory() + "/XMLFile1.xml");
            }
      

  7.   

    XmlDataDocument datadoc = new XmlDataDocument();//操作XML文档
    datadoc.DataSet.ReadXml(sRead);//将读取的字节流存到DataSet里面去
    datadoc.DataSet.Tables[0].DefaultView.RowFilter = "pro_id="+pro_id;我这个是查询某个id的