Ну что-то должно иметь ссылку на файл. Тем не менее, вы можете легко изменить свой код так, чтобы он просто принимал Stream
(который должен быть доступен для чтения, записи и поиска):
private static void ChangeDocument(Stream stream)
{
XmlDocument doc = new XmlDocument();
doc.Load(stream);
XmlNodeList xmlnode = doc.GetElementsByTagName("value");
xmlnode[0].ChildNodes[0].Value = 23;
stream.Position = 0;
doc.Save(stream);
stream.SetLength(stream.Position); // Truncate the file if it was longer
}
Это немного некрасиво, по общему признанию ...
Конечно, вы всегда можете передать само имя файла - ваш вызов MapPath
будет по-прежнему выполняться в методе более высокого уровня, что может быть всем, чего вы пытаетесь достичь:
private static void ChangeDocument(string filename)
{
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNodeList xmlnode = doc.GetElementsByTagName("value");
xmlnode[0].ChildNodes[0].Value = 23;
doc.Save(filename);
}
И напоследок - если вы используете .NET 3.5 или выше, я настоятельно рекомендую использовать LINQ to XML в качестве более приятного XML API.