【问题标题】:XmlReader - read xml with colons in tag namesXmlReader - 读取标签名称中带有冒号的 xml
【发布时间】: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 - 我可以只追加根元素,但由于它是一个巨大的文件,它不是很聪明的字符串。替换并删除:。生病可能很快就会失去记忆(-:

标签: c# xmlreader


【解决方案1】:

您仍然可以附加命名空间,只需将文件读入内存并在那里操作即可。我使用不符合 XML 标准的机器制造商提供的几个基于 XML 的 API 来做到这一点,以便使用普通的 xml 解析器更容易阅读

【讨论】:

  • 那是不可能的,我只能操作根元素,正如我告诉你的,文件很大。我有内存不足异常的危险
  • 那你做得不对。我处理高达 2gb 的文件,没有任何类型的内存异常。这个有可能。您可能正在尝试通过 XmlReader 本身来执行此操作
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多