我想编辑我的xml文件

时间:2009-11-15 11:39:27

标签: c# .net xml

您好我正在处理XML文件,在这里我想授权用户将我的xml文件节点编辑为他自己的自定义语言。

我附上我的代码,但它没有编辑我的xml文件。需要帮助。

class Program
{
    static void Main(string[] args)
    {
        //The Path to the xml file   
        string path = "D://Documents and Settings//Umaid//My Documents//Visual Studio 2008//Projects//EditXML//EditXML//testing.xml";

        //Create FileStream fs  
        System.IO.FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

        //Create new XmlDocument       
        System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
        //Load the contents of the filestream into the XmlDocument (xmldoc) 
        xmldoc.Load(fs);
        //close the fs filestream            
        fs.Close();
        //Change the contents of the attribute        
        xmldoc.DocumentElement.ChildNodes[0].Attributes[0].InnerText = "Umaid";

        // Create the filestream for saving      
        FileStream WRITER = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);

        // Save the xmldocument      
        xmldoc.Save(WRITER);
        //Close the writer filestream 
        WRITER.Close();

    }
}

我要编辑的XML文件,但不能。

    <?xml version="1.0" encoding="utf-8" ?>
<rule id="city" scope="public">
  <one-of>
    <item>Boston</item>

  </one-of>
</rule>

2 个答案:

答案 0 :(得分:1)

你真的想用你的XML做什么?你要改变哪个属性??

一个提示:您可以直接将XmlDocument加载并保存到路径中 - 不需要文件流.....

xmldoc.Load(@"D:\yourpath\file.xml");

xmldoc.Save(@"D:\yourpath\newfile.xml");

问题是你的表达式xmldoc.DocumentElement.ChildNodes[0]选择了没有属性的<one-of>节点。

您无法更改不存在的属性。

如果要更改<rule>的“id”属性,则需要在DocumentElement上执行此操作:

xmldoc.DocumentElement.Attributes["id"].Value = "Umaid";

如果您想更改<item>内的文字,请执行以下操作:

XmlNode itemNode = xmldoc.SelectSingleNode("/rule/one-of/item");
if(itemNode != null)
{
   itemNode.InnerText = "Umaid";
}

马克

答案 1 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        string path = "D:\\Documents and Settings\\Umaid\\My Documents\\Visual Studio 2008\\Projects\\EditXML\\EditXML\\testing.xml";
        XmlDocument doc = new XmlDocument();
        doc.Load(path);
        var itemNode = doc.SelectSingleNode("rule/one-of/item");
        if (itemNode != null)
        {
            itemNode.InnerText = "Umaid";
        }
        doc.Save(path);
    }
}