如何更新XML节点?

时间:2009-01-27 11:00:30

标签: c# asp.net xml

很容易读取XML文件并获取确切的节点文本,但如何使用新值更新该节点?

阅读:

public static String GetSettings(SettingsType type, SectionType section)
{
    XmlTextReader reader = new XmlTextReader(HttpContext.Current.Request.MapPath(APPSETTINGSPATH));
    XmlDocument document = new XmlDocument();
    document.Load(reader);

    XmlNode node = document.SelectSingleNode(
                        String.Format("/MyRootName/MySubNode/{0}/{1}",
                        Enum.Parse(typeof(SettingsType), type.ToString()),
                        Enum.Parse(typeof(SectionType), section.ToString())));       
    return node.InnerText;
}

写......?

public static void SetSettings(SettingsType type, SectionType section, String value)
{
    try
    {
        XmlTextReader reader = new XmlTextReader(HttpContext.Current.Request.MapPath(APPSETTINGSPATH));
        XmlDocument document = new XmlDocument();
        document.Load(reader);

        XmlNode node = document.SelectSingleNode(
                            String.Format("/MyRootName/MySubNode/{0}/{1}",
                            Enum.Parse(typeof(SettingsType), type.ToString()),
                            Enum.Parse(typeof(SectionType), section.ToString())));
        node.InnerText = value;
        node.Update();
    }
    catch (Exception ex)
    {
        throw new Exception("Error:", ex);
    }
}

注意行,node.Update();不存在,但这就是我想要的:)

我看到了XmlTextWriter对象,但它会将整个XML写入一个新文件,我只需更新原始Node中的一个值,我可以保存为新文件,然后将新文件重命名为原始文件但是......这样做必须更简单吗?

你们中的任何一个人都有关于这样做的示例代码吗?

谢谢

4 个答案:

答案 0 :(得分:8)

您不需要“更新”方法 - 设置InnerText属性会更新它。但是,它仅在内存中应用更新。你需要重写整个文件 - 你不能只更新它的一小部分(至少,没有很多的工作,没有外面的 - 盒子支持)。

答案 1 :(得分:3)

XmlDocument.Load有一个重载,它将直接采用文件名,因此不需要读者。

同样,当你完成XmlDocument.Save时,将采用一个文件名来保存文档。

答案 2 :(得分:2)

nodeValue属性可用于更改文本节点的值。

以下代码更改第一个元素的文本节点值: 例如:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue="Easy Cooking";

来源:http://www.w3schools.com/DOM/dom_nodes_set.asp

答案 3 :(得分:1)

您正在更新xml文档的内存中表示中的节点,AFAIK无法直接在物理文件中更新节点。您必须将它全部转储回文件。