gpt4 book ai didi

c# - XmlReader/Writer 给出结束元素的错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:12 25 4
gpt4 key购买 nike

我有一个表示格式良好的 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;
}
}
}
}

最佳答案

空元素后面没有 EndElement。所以你需要检查 IsEmptyElement处理此类节点(文章中的部分示例):

   while (reader.Read()){
if (reader.IsStartElement()){
if (reader.IsEmptyElement)
Console.WriteLine("<{0}/>", reader.Name);
else{

请注意,使用 XElement(可能与 LINQ-to-XML)甚至 XmlDocument API 通常更易于使用并且具有更多示例。考虑转换,除非您的 XML 文档超过 10Mb。

关于c# - XmlReader/Writer 给出结束元素的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com