Xml解析好奇心 – 属性中的“大于”
我有一些看起来像这样的xml:
'/>
这被我试过的解析器接受为格式良好的xml, RFC的相关部分也暗示这是有效的,虽然我个人不相信它直到我检查(有趣的是这不会如果它是一个开口的三角形支撑,则它是有效的,但它是一个闭合支撑)。
我有一些用于“漂亮打印”xml的代码 – 它应该只改变行长和新行 – 它不应该改变任何内容。 但是,无论我如何尝试解析这个xml,它总是被实体替换:
这并非完全出乎意料,任何xml解析器都应该将两者视为相同,但出于我的目的,我不希望出现这种行为,因为这是仅用于更改xml文件格式的代码,而不是其内容。
如果我将xml加载到XmlDocument中并不重要:
var xml = " '/>"; var doc = new XmlDocument(); doc.LoadXml(xml); Console.WriteLine(doc.OuterXml);
或者XElement:
var xElement = XElement.Parse(xml); xElement.Save(Console.Out);
或通过读写器对传递:
using (var ms = new MemoryStream()) using (var streamWriter = new StreamWriter(ms)) { streamWriter.Write(xml); streamWriter.Flush(); ms.Position = 0; using (var xmlReader = XmlReader.Create(ms)) { xmlReader.Read(); Console.WriteLine(xmlReader.ReadOuterXml()); } }
它们都用>
替换>
实体>
,事件虽然前者是可以接受的格式良好的xml。 我尝试过使用各种XmlReaderSettings
或XElement的LoadOptions
等,但都无济于事。
有谁知道有任何方法可以防止这种情况发生?
这更像是一个好奇而不是实际问题,但我很想知道是否有人有任何解决方案。
[ 编辑澄清,根据一些意见/答案 ]
我确实意识到这种行为是可以预期的。 在我的情况下,也许我根本不想使用其中一个内置的xml API(尽管我使用的任何东西都需要理解xml的结构,以免在不适当的地方换行,它改变了语义的含义。文献。)
我真的只是想知道是否有人知道改变这些解析器中的行为的方法(我希望你能想到,如果有人知道,他们可能会在SO上),或者如果有人有任何其他想法。
我的猜测是你会发现没有办法改变这种情况 – 因为我强烈怀疑加载后的内部表示是否相同无论是最初的还是>
。
有趣的是, xr.GetAttribute("attribute")
会像您期望的那样返回" > "
。 我的猜测是,在ReadOuterXml
创建XML时,它编码所有>
as >
。 因此,为了解决这个问题,您可以在发生每个节点时对其进行处理。
上述就是C#学习教程:Xml解析好奇心 – 属性中的“大于”分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/990593.html