【发布时间】:2014-02-03 06:51:16
【问题描述】:
我有非常复杂的 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 other message</ev:leveltwo>
</ev:ex>
</log:event>
XmlReader 不知道如何阅读它,因为它在每个 xml 标记上都没有名称空间定义。
我会以编程方式完成(将命名空间附加到字符串),但文件很大,我不可能。
(我不控制文件的创建)。
有什么建议如何在没有命名空间的情况下将该文件读取为 xml?
谢谢!
【问题讨论】:
-
没有。当您使用未定义的名称空间时,文件不是正确的 XML 文档。不要期望 XML Parser 解析不正确的 XML 文档。
-
这些是冒号,而不是分号 - 如果没有命名空间别名,它根本就不是一个有效的 XML 文档。即使您不控制文件创建,您仍然应该抱怨他们没有生成有效的 XML。但是,如果您知道所有使用的前缀,则可以在根元素处添加命名空间别名。
-
@JonSkeet - 这是个好消息,我正在控制根元素。您能否提供一个示例,如何让读者了解所有用例? (
ev:logger, ev:line, ev:ex等)谢谢 -
@SexyMF:只要有
xmlns:ev="http://someurl"- 或者你想要的任何URI,基本上。为每个命名空间别名使用不同的 URI。 element nmaes(记录器、行、ex 等)无关紧要 - 它只是您感兴趣的命名空间别名。但是您如何控制根元素而不是其他任何东西?这听起来很奇怪,如果让生成文件的人来生成真正的 XML,你会好多。 -
@JonSkeet - 我可以只追加根元素,但由于它是一个巨大的文件,它不是很聪明的字符串。替换并删除
:。生病可能很快就会失去记忆(-: