对XML后进行解析构表,修改其中的某个结点值..  
原数据内容如下:  
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  <DSPrp xmlns="http://mmm.org/tdn.xsd">
    <prp diffgr:id="tn1" msdata:rowOrder="0" diffgr:hasChanges="modified">
      <pid>5</pid>
      <pno>10/zzz</pno>
    </proposal>
    <mbudget diffgr:id="budget" msdata:rowOrder="0" diffgr:hasChanges="inserted">
      <pid>8</pid>
      <it_no>12</it_no>
      <quantity>8</quantity>
      <duration>1</duration>
      <total_amount>20</total_amount>
      <re />
    </mbudget>
    <org_prp><org_code>22</org_code></org_prp>
  </DSPrp>
</diffgr:diffgram>
我现在要修改mbudget的结点,并且在mbudget后面加上一条新的mbudget 记录, 
请问应该怎样写,跪求高手指教! 

解决方案 »

  1.   

    兄弟啊
    首先你的文件是错误的
    <proposal diffgr:id="tn1" msdata:rowOrder="0" diffgr:hasChanges="modified">
           <pid>5 </pid>
           <pno>10/zzz </pno>
         </proposal> 
      

  2.   

    给你一个例子你研究一下吧 
    class Program
        {
            static void Main(string[] args)
            {
                XmlTextReader txtReader = new XmlTextReader("..\\..\\Employees.xml");
                XmlDocument doc = new XmlDocument();
                doc.Load(txtReader);
                Console.WriteLine(doc.OuterXml);
                Console.WriteLine("=====");
                            XmlElement element = doc.CreateElement("address");
                XmlText text = doc.CreateTextNode("beijing");            XmlNode refNode= doc.DocumentElement.SelectSingleNode("//employee");
                XmlNode newNode = doc.CreateNode(XmlNodeType.Element,"country", "dd");
                newNode.InnerXml = "country";
                newNode.InnerText = "china";
                doc.DocumentElement.InsertAfter(newNode, refNode);
                Console.WriteLine(doc.OuterXml);
                Console.WriteLine("===");
                doc.DocumentElement.AppendChild(element);
                doc.DocumentElement.LastChild.AppendChild(text);
                Console.WriteLine(doc.DocumentElement.OuterXml);
                Console.WriteLine("=====");
                Console.WriteLine(doc.OuterXml);
                Console.WriteLine("=====");            XmlNode root = doc.DocumentElement;
                root.RemoveChild(root.FirstChild);
                Console.WriteLine(root.OuterXml);
                Console.WriteLine("==");
                root.RemoveChild(root.SelectSingleNode("/employees/employee"));            Console.WriteLine(doc.OuterXml);
                Console.WriteLine("===");            DateTime dt1 = DateTime.Parse("2008-02-10");
                DateTime dt2 = DateTime.Parse("2008-03-20");
                TimeSpan span = dt2 - dt1;
                string result = span.ToString().Substring(0, 2);
                int num = int.Parse(result) / 2;
                DateTime dt = dt1.AddDays(num);            Console.WriteLine(dt.ToString());
                
                Console.ReadLine();
            }
        }<?xml version="1.0" encoding="utf-8" ?>
    <employees>
      <employee id="1">
        <name>
          <firstName>shi</firstName>
          <secondName>wenbin</secondName>
        </name>
        <age>20</age>
        <sex>male</sex>
      </employee>
      <employee id="2">
        <name>
          <firstName>zhengyu</firstName>
          <secondName>yu</secondName>
        </name>
        <age>18</age>
        <sex>female</sex>
      </employee>
    </employees>
      

  3.   

    我这样提取mbudget的结点 
    node = xmldocSource.SelectSingleNode("//diffgr:diffgram/DSPrp/mbudget");提示错误信息:“需要命名空间管理器或   XsltContext。此查询具有前缀、变量或用户定义的函数。”应该怎样提取?
      

  4.   

    你这是强类型数据集吧
    操作数据集不方便多了命名空间这么搞试试
    XmlNamespaceManager m = new XmlNamespaceManager(xmldocSource.NameTable);
    m.AddNamespace("diffgr", "urn:schemas-microsoft-com:xml-diffgram-v1");             m.AddNamespace("tdn", "http://mmm.org/tdn.xsd");
    node = xmldocSource.SelectSingleNode("tdn:DSPrp/diffgr:mbudget", m);