2010-10-22 28 views
1

我的需求是更新XML文件(通过参数标识的一些元素,通过参数再次标识新的属性值)。在C#中使用XSLT更新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文件,我第一次复制所有元素,属性。然后基于<xsl:template match = ... />,我更新了元素attr/values。

这一切都被保存到Destination.xml

如果我想这一切对Source.xml本身发生。

当然,最简单的解决办法(或到目前为止我的解决方案)是取代Destination.XML的Source.XML后,我顺利完成XSLT.Transform。

回答

1

我认为您的转换到文件然后替换解决方案是一样好,你会得到。即使.NET和操作系统允许您在阅读时不想覆盖Source.XML文件。

为了提出一个更好的选择,以变换到文件,然后替换(TTFTR),我会问,是什么样的TTFTR,你觉得是最理想的?

我能想到的另一种选择是将变换的结果写入内存;当转换完成时,将内存中的结果保存到源文件中。要转换为内存,请将MemoryStream对象作为参数传递给XmlWriter.Create()

1

您绝不应该尝试使用XSLT就地更新。这是糟糕的设计,不符合功能语言的精神。

这就是说,你可以源XML文件复制到一个临时目录中,然后用所创建覆盖原文件中的一个XmlWriter实例应用转换。

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