【问题标题】:How to read this XML file in C++? non standard (read) "INVALID" XML如何在 C++ 中读取这个 XML 文件?非标准(读取)“无效”XML
【发布时间】:2017-09-02 01:24:29
【问题描述】:

所以我遇到了这个我想用 C++ 读取的 XML 文件。它的标题信息似乎很奇怪,并且有很多这样的文件。我似乎无法批量更改,所以我将不得不按原样阅读。

我也愿意直接使用 ifstream 来解析它。我想提取数据和数字。其中一个文件的内容如下:

<!DOCTYPE refSeg SYSTEM "isthisthereallife.no">
<refSeg src="skjkska.doc" how="dunno" willa="25820">
<trans type="IN1" pum1="2280" pum2="2281"/>
<trans type="IN2" pum1="3495" pum2="3496"/>
<trans type="IN3" pum1="4936" pum2="4937"/>
</refSeg>

我想要“pum1”和“pum2”下的数字在单独的变量/矩阵格式/列表中。还有另一个变量中的“类型”。

【问题讨论】:

  • 如果“非标准”是指“无效”,那么您将与第 3 方 XML 库作斗争——它们通常被设计为只允许有效的 XML。您可以编写自己的解析器(不要!)或执行必要的手术以首先将数据转换为有效的 XML。
  • 但是我有这么多文件,有没有办法直接通过ifstream读取这些数据?
  • 您可以通过任何标准机制阅读它。但问题在于 XML 解析。
  • 我怎样才能把这些数据转换成有效的XML?
  • XML都是这么简单的格式吗?

标签: c++ xml parsing xml-parsing


【解决方案1】:

您谈论“非标准”和“无效”的 XML 让每个人都感到困惑。

您向我们展示的 XML 示例没有任何“非标准”。我们无法判断它是否“无效”——这一切都取决于文件“isthisthereallife.no”中的 DTD 定义,它定义了允许 XML 文件包含哪些元素和属性。

我怀疑当您说“非标准”时,您的意思是“我以前从未见过带有 DOCTYPE 定义的 XML 文件”。

下一步取决于您能否找到 DTD 文件“isthisthereallife.no”,如果可以,取决于它对允许的 XML 内容的说明。

作为提出 SO 问题的一般提示,如果某些事情不起作用,您应该确切地告诉我们您做了什么以及它是如何失败的。

【讨论】:

  • 好吧,我不是建议您更改帖子,所以请不要怪我。如果你听了,你就会读到我的建议,那就是在我们告诉你如何解析文件之前,我们需要知道 DTD 文件是否存在,如果存在,它里面有什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多