【发布时间】:2009-05-13 15:24:51
【问题描述】:
我有一个写入文件的 XmlTextWriter 和一个使用该文本编写器的 XmlWriter。此文本编写器设置为输出制表符缩进的 XML:
XmlTextWriter xtw = new XmlTextWriter("foo.xml", Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xtw.IndentChar = '\t';
xtw.Indentation = 1;
XmlWriter xw = XmlWriter.Create(xtw);
根据 Jeff 的 MSDN 链接更改:
XmlWriterSettings set = new XmlWriterSettings();
set.Indent = true;
set.IndentChars = "\t";
set.Encoding = Encoding.UTF8;
xw = XmlWriter.Create(f, set);
这不会改变最终结果。
现在我在我的 XmlWriter 中的任意深度,我从其他地方(我无法控制)获取一个 XML 字符串,它是一个单行、非缩进的 XML。如果我调用 xw.WriteRaw() 则该字符串被逐字注入并且不遵循我想要的缩进。
...
string xml = ExternalMethod();
xw.WriteRaw(xml);
...
基本上,我想要一个可以解析 XML 字符串并遍历所有 WriteStartElement 等的 WriteRaw,以便根据 XmlTextWriter 的设置对其进行重新格式化。
我的偏好是使用我已有的设置来执行此操作,并且无需重新加载最终的 XML 来重新格式化它。我也不想用 XmlReader 之类的东西解析 XML 字符串,然后模仿它在我的 XmlWriter 中找到的内容(非常非常手动的过程)。
最后,我宁愿有一个简单的解决方案,也不愿遵循我的喜好。 (当然,最好的解决方案很简单,并且符合我的喜好。)
【问题讨论】: