Как обновить узел XML? - PullRequest
       13

Как обновить узел XML?

3 голосов
/ 27 января 2009

Легко прочитать 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);
    }
}

Примечание строка, узел. Обновление (); не существует, но это то, что я хотел:)

Я видел объект XmlTextWriter, но он будет записывать весь XML в новый файл, и мне просто нужно обновить одно значение в исходном узле, я могу сохранить его как новый файл и затем переименовать новый файл в исходный имя, но ... это должно быть проще сделать это правильно?

У кого-нибудь из вас есть пример кода, который собирается это сделать?

Спасибо

Ответы [ 4 ]

8 голосов
/ 27 января 2009

Вам не нужен метод «update» - установка свойства InnerText обновляет его. Однако, это только применяет обновление в памяти. Вам нужно нужно переписать весь файл, хотя - вы не можете просто обновить небольшую его часть (по крайней мере, без много работы и без -box поддержка).

3 голосов
/ 27 января 2009

XmlDocument.Load имеет перегрузку, которая принимает имя файла напрямую, поэтому нет необходимости в считывателе.

Аналогично, когда вы закончите, XmlDocument.Save примет имя файла, к которому будет сохранен документ.

2 голосов
/ 26 июля 2010

Свойство 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

1 голос
/ 27 января 2009

Вы обновляете узел в представлении в памяти документа XML, AFAIK. Нет способа обновить узел непосредственно в физическом файле. Вы должны сбросить все это обратно в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...