在C#中使用XSLT更新XML-如何更新同一文件

在C#中使用XSLT更新XML-如何更新同一文件,c#,xml,xslt,C#,Xml,Xslt,我的要求是更新XML文件(一些元素通过参数标识,新的属性值通过参数再次标识) 我正在使用XSLT通过C#代码实现同样的功能 我的代码如下: XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(f_Xslt); XmlReader xr = XmlReader.Create("SourceXML.xml"); XmlWriter xw = XmlWriter.Create("DestinationXML.xml");

我的要求是更新XML文件(一些元素通过参数标识,新的属性值通过参数再次标识)

我正在使用XSLT通过C#代码实现同样的功能

我的代码如下:

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(f_Xslt);
XmlReader xr = XmlReader.Create("SourceXML.xml");
XmlWriter xw = XmlWriter.Create("DestinationXML.xml");
XsltArgumentList argsList = new XsltArgumentList(); 
argsList.AddParam("", "", "");
...
...
...
xslt.Transform(xr, argsList, xw);
在XSLT文件中,我首先复制所有元素和属性。然后根据
,更新元素attr/值

所有这些都保存到Destination.xml

如果我希望所有这些都发生在Source.xml本身上呢


当然,最简单的解决方案(或我目前的解决方案)是在成功完成XSLT.Transform之后,用Destination.XML替换Source.XML

我认为您将文件转换为“然后替换”的解决方案与您将获得的解决方案一样好。您不希望在读取源.XML文件时覆盖它,即使.NET和操作系统允许您这样做

为了提出一个更好的替代方案来转换为文件然后替换(TTFTR),我想问一下,关于TTFTR,您觉得什么是次优的


我能马上想到的唯一选择就是把你转变的结果写进记忆;转换完成后,将结果从内存保存到源文件中。要转换为内存,请将对象作为参数传递给。

您永远不应该尝试使用XSLT就地更新。这是糟糕的设计,不符合函数式语言的精神

这就是说,您可以将源XML文件复制到临时目录中,然后使用创建用于覆盖原始文件的
XmlWriter
实例应用转换

正如我之前所说,我不推荐这个