c++ - 在没有附加库的情况下在标准 C/C++ 中解析 XML

标签 c++ c xml parsing

我有一个 XML(假设它是有效的),我必须解析它并将它存储在树中。

解析它的最佳方法是什么,不使用其他库,仅对字符串进行基本操作?

请记住,我不必验证它,只需将其解析并内存到树中即可。

最佳答案

XML 的基本结构非常简单:

<tagname [attribute[="value"] ...]>content</tagname>

内容可能包含普通文本和更多 XML 结构,或特殊形式

<tagname [attribute[="value"] ...]/>

相当于

<tagname [attribute[="value"] ...]></tagname>

也就是说,。空内容。

因此,如果您不需要解释 DTD 或做其他花哨的事情,您可以执行以下操作:

  1. 检查第一个非空白字符是< .如果没有,则您没有 XML,只能报错并退出。

  2. 现在跟在标签名称之后,直到第一个空格,或 />特点。存储它。

  3. 如果下一个非空白字符是/ , 检查它后面是否跟有 > .如果是这样,您就完成了解析并可以返回结果。否则,您将得到格式错误的 XML,并可能会出错退出。

  4. 如果字符是> ,那么您就找到了开始标记的结尾。现在跟随内容。继续第 6 步。

  5. 否则接下来就是争论。解析它,存储结果,然后继续第 3 步。

  6. 阅读内容直到找到 <性格。

  7. 如果该字符后跟/ ,它是结束标记。检查它后面是否跟有标签名称和 > ,如果是,则返回结果。否则,抛出错误。

  8. 如果您到达这里,您就找到了嵌套 XML 的开头。用这个算法解析它,然后在 6 处继续。

关于c++ - 在没有附加库的情况下在标准 C/C++ 中解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862744/

相关文章:

c++ - 为什么我需要一个外部变量的包含文件?

c++ - 类没有构造函数前向声明

c++ - 大小由模板参数定义的成员数组,但为什么没有对零大小数组发出警告?

java - AlarmManager 在 Android 中不工作

c++ - 没有虚析构函数的情况下删除基类指针会导致内存泄漏吗?

c - 基数范围内整数的最小完美散列

c - 为什么我的管道不能互相通信?

c++ - 使用 scanf() 具有不同数据类型的多个输入

JavaScript 循环未完成

xml - 编辑 .plist 文件 - 是否允许单引号作为字符串?