C# XmlReader-读取标记名中带有冒号的xml
我有非常复杂的XML,需要使用C# XmlReader-读取标记名中带有冒号的xml,c#,xmlreader,C#,Xmlreader,我有非常复杂的XML,需要使用XmlReader阅读 xml中的元素如下所示: <log:event> <ev:logger>some text</ev:logger> <ev:line>24</ev:line> <ev:ex> <ev:levelone>some message</ev:levelone> <ev:leveltwo>some ot
XmlReader
阅读xml中的元素如下所示:
<log:event>
<ev:logger>some text</ev:logger>
<ev:line>24</ev:line>
<ev:ex>
<ev:levelone>some message</ev:levelone>
<ev:leveltwo>some other message</ev:leveltwo>
</ev:ex>
</log:event>
一些文本
24
一些信息
其他信息
XmlReader
将不知道如何读取,因为它在每个xml标记上都没有名称空间定义。我本可以通过编程方式(将名称空间附加到字符串中)完成此操作,但文件太大,我认为这是不可能的。
(我不控制文件的创建)。
有没有任何建议,在没有名称空间的情况下,如何将该文件读取为xml
谢谢 您仍然可以附加名称空间,只需将文件读入内存并在内存中进行操作即可。我使用机器制造商提供的几个不符合XML标准的基于XML的API来实现这一点,以使普通XML解析器更易于阅读。否。使用未定义名称空间时,文件不是正确的XML文档。不要期望XML解析器解析不正确的XML文档。这些是冒号,而不是分号——如果没有名称空间别名,它就不是有效的XML文档。即使您不能控制文件的创建,也应该抱怨它们没有生成有效的XML。但是,如果您知道使用的所有前缀,您可以在根元素添加名称空间别名。@JonSkeet-这是个好消息,我正在控制根元素。你能举个例子吗?我怎样才能让读者知道所有的用例?(
ev:logger、ev:line、ev:ex等)thanks@SexyMF:只要有xmlns:ev=”http://someurl“
-或者您想要的任何URI,基本上。为每个命名空间别名使用不同的URI。元素nmaes(logger、line、ex等)无关紧要——您感兴趣的只是名称空间别名。但是为什么你只控制根元素而不控制其他元素呢?这听起来很奇怪,你最好让生成文件的人生成真正的XML。@JonSkeet-我可以只附加根元素,但由于它是一个巨大的文件,所以编写字符串不是很聪明。替换并删除:
。我可能很快就会忘记的(:这是不可能的,我只能操作根元素,正如我告诉过你的,文件太大了。如果你做得不对,我就有内存不足的危险。我可以处理高达2gb的文件,没有任何内存异常。这是可能的。你可能正试图通过XmlReader本身来实现这一点