我想用c#以编程方式更改XML文档中的根节点和名称空间。我遇到了几个不同的解决方案,主要使用XmlDocument
。
最常见的解决方案是将整个文档加载到内存中,替换rood节点,然后将InnerXml
设置为原根的InnerXml
。
在我看来,当你只需要一个节点时,在内存中加载整个XML文档似乎有点愚蠢。对于任何大小的XML,这几乎都可以快速运行。
的例子:
<MyDocument xmlns="http://question.stackoverflow.com">
<AfewKilobytesOfXML />
</MyDocument>
可能成为:
<YourDocument xmlns="http://answer.stackoverflow.com">
<AfewKilobytesOfXML />
</YourDocument>
最好的情况是文档的主体部分被完全忽略,并且不作为流加载到内存中。
我想提供一些我已经尝试过的东西,但我甚至不知道哪些类是最好的。
输入为Stream
。很高兴知道:Stream
可能根本不包含XML,所以如果您的答案有检查,则可以加分。
如果您想避免将整个xml文件加载到内存中,我会说看看XmlTextReader和xmltextwwriter。这些类是为节点一个节点地处理XML文件而设计的,无需将整个文档加载到内存中。
查看此链接中使用的各种方法:http://www.codeproject.com/Articles/15278/How-to-Append-to-a-Large-XML-File