【发布时间】:2014-09-08 23:02:18
【问题描述】:
我有一个代表格式良好的 xml 文档的流。我正在尝试使用 XmlReader/Writer,我只是想读取整个流并再次将其写出。
这似乎适用于正常的结束元素:
<Context>some text</Context>
对于像这样的“短”结束元素:
<Context/>
在这些情况下,我正确地获得了开始和结束元素事件。
但是,如果一个短结束元素之后紧跟一个普通结束元素:
<Item><Context/></Item>
然后我确实在上下文元素上得到了一个开始元素,但不是一个结束元素!
这种简单的阅读和写作转换解释了这种奇怪的行为有什么问题?
using (XmlReader reader = XmlReader.Create(new StreamReader(GetTestXMLStream())))
using (XmlWriter writer = XmlWriter.Create(output, new XmlWriterSettings {Indent = 4}))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
{
//Triggers for <Context/>
writer.WriteStartElement(reader.Name);
break;
}
case XmlNodeType.Text:
{
writer.WriteString(reader.Value);
break;
}
case XmlNodeType.EndElement:
{
//Triggers for <Context/>, but not if <Context/> is followed by </Item>. But does trigger for </Item> itself.
writer.WriteFullEndElement();
break;
}
}
}
}
【问题讨论】: