2012-11-28 63 views
5

我已经尝试了两种方式,但他们都没有工作.. 第一种方式::XML节点编辑基于一个XMLELEMENT

string filepath = Server.MapPath[this is not a link]("XMLFile2.xml"); 
XmlDocument xdoc = new XmlDocument(); 
       xdoc.Load(filepath); 

       XmlNode root = xdoc.DocumentElement; 
       XmlNode idNode = root.SelectSingleNode("/students/student/id"); 
if (idNode.Value == 9.ToString()) 
        { 
         var nodeOfStudent = xdoc.SelectNodes("/students/student[@id='9']"); 
         nodeOfStudent[1].InnerXml = TextBox_firstname.Text; 
         nodeOfStudent[2].InnerXml = TextBox_lastname.Text; 
         nodeOfStudent[3].InnerXml = TextBox_dob.Text; 
         nodeOfStudent[4].InnerXml = TextBox_class.Text; 
         nodeOfStudent[5].InnerXml = TextBox_section.Text; 
         nodeOfStudent[6].InnerXml = TextBox_telephone.Text; 

        } 

第二种方式::

string filepath = Server.MapPath("XMLFile2.xml"); 
       XmlDocument xdoc = new XmlDocument(); 
       xdoc.Load(filepath); 

       XmlNode root = xdoc.DocumentElement; 
       XmlNode idNode = root.SelectSingleNode("/students/student/id"); 

xdoc.SelectSingleNode("/students/student[@id='10']/firstname").InnerXml = TextBox_firstname.Text; 
         xdoc.DocumentElement.AppendChild(firstname); 
         xdoc.SelectSingleNode("/students/student[@id='10']/lastname").InnerXml = TextBox_firstname.Text; 
         xdoc.SelectSingleNode("/students/student[@id='10']/dob").InnerXml = TextBox_firstname.Text; 
         xdoc.SelectSingleNode("/students/student[@id='10']/class").InnerXml = TextBox_firstname.Text; 
         xdoc.SelectSingleNode("/students/student[@id='10']/section").InnerXml = TextBox_firstname.Text; 
         xdoc.SelectSingleNode("/students/student[@id='10']/telephone").InnerXml = TextBox_firstname.Text; 

         xdoc.Save(filepath); 

是有什么错了,我没有看到... 我的XML文件看起来像这样::

<students> 
    <student> 
    <id>1</id> 
    <first_name>ahmad</first_name> 
    <last_name>hani</last_name> 
    <DOB>12/5/1998</DOB> 
    <class>sixth</class> 
    <section>A</section> 
    <telephone>06555632</telephone> 
    </student> 
</students> 

和我使用的查询海峡使用“查询字符串”来加载位于另一个页面中的gridView的值....

在此先感谢。

回答

1

您可以轻松地使用LINQ这样对XML:

int id = 9; 
XDocument xdoc = XDocument.Load(filepath); 
var student = xdoc.Descendants("student") 
        .Where(s => (int)s.Element("id") == id) 
        .SingleOrDefault(); 

if (student != null) 
{ 
    student.Element("first_name").Value = TextBox_firstname.Text; 
    student.Element("last_name").Value = TextBox_lastname.Text; 
    student.Element("DOB").Value = TextBox_dob.Text; 
    student.Element("class").Value = TextBox_class.Text; 
    // etc 
} 

xdoc.Save(filepath); 
+0

我想基于ID XMLELEMENT值筛选我的代码,,但它似乎并没有工作! XmlDocument xdoc = new XmlDocument(); xdoc.Load(filepath); XmlNode root = xdoc.DocumentElement; XmlNode idNode = root.SelectSingleNode(“/ students/student/id”); 如果(idNode.Value == NULL){创建一个新的XML节点} 否则,如果(idNode.Value!= NULL){创建id的值一个新的XML元素) 我试图解释它的问题,这里是链接... http://stackoverflow.com/questions/13607387/edit-xml-elements-of-a-specific-node-based-on-its-id-element-asp-net-page –