使用XmlTextWriter从XmlTextReader复制片段

时间:2018-06-02 18:06:40

标签: c# xml xmltextreader xmltextwriter

当我使用XmlTextReader读取XML文件时,我有时需要保存节点,而且它是子节点。我这样做是使用XmlTextWriter(我没有采用这种方法)。

问题是XmlTextReader知道这个片段在节点和属性的前缀中使用的一堆命名空间,但是在那时没有声明它们被声明为更高(通常但不总是在根节点中)。

我很好地告诉XmlTextWriter所有命名空间,即使没有使用某些命名空间。

我的第一个问题是,如何最好地复制名称空间?我是否调用XmlTextReader.GetNamespacesInScope(什么参数)?然后逐个调用XmlTextWriter.WriteAttributeString()来编写每个命名空间?

如果我这样做,XmlTextWriter是否足够聪明,知道这些是名称空间声明,因此不会在子节点中再次重写它们?

其次,如果我将XmlTextWriter.WriteAttributeString(localName,ns,value)用于进入内部节点范围的其他命名空间,那么添加这些命名空间是否足够智能?或者我是否需要使用XmlTextWriter.WriteAttributeString(前缀,uri)显式添加它?

基本代码:

// this object is created, is reading XML, and hit a point below eventually...
XmlTextReader reader;

// ...

// On handling a specific XmlNodeType.Element
MemoryStream stream = new MemoryStream();
XmlTextWriter fragment = new XmlTextWriter(stream, utf8);
// What do I do here to get the namespaces in scope in reader into writer?

1 个答案:

答案 0 :(得分:0)

是的,解决方案是通过调用以下方式从阅读器复制命名空间:

reader.GetNamespacesInScope (System.Xml.XmlNamespaceScope.ExcludeXml)

并添加返回的所有命名空间。效果很好。