在没有库的情况下解析 C 中的 XML
Parsing XML in C without libraries.
谁能给我一个关于在只有标准库的独立 C 中解析 xml 的过程的概述。
我想把它作为实践,因为这实际上是一个有用的项目。
我看到的大多数示例似乎都大量使用指针和结构数组。因此,任何提示或概述将不胜感激。
好吧,你会看到两件不同的事情。 首先是实现这一目标的高级战略。 第二个是数据结构和其他特定于语言的实现细节,你将用来完成它。
对于高级部分,一个好的起点是学习有限自动机。 它们是一个非常强大的概念工具,用于规划解析和其他严重依赖状态的作业,并且很容易转换为代码。
有关实现详细信息...好吧,有人已经指出了树结构。 XML基本上是一棵树,当你深入到它时。
它非常简单,您只需阅读文本并将其构建到对象树中即可。
如果您有以下简单的 XML:
<A>Hello<B x="1">World</B></A>
<A>Another Object A</A>
你可以构建类似的东西:
Obj_1
Name = "A"
Text = "Hello"
--> Obj_2
Name = "B"
Text = "World"
Param_1 (Name = "x", Value = "1")
Obj_3
Name = "A"
Text = "Another Object A"
使用像这样的简单类对象,您可以构建树(我意识到您询问了在常规 C 中解析它,但您也标记了它C++所以我的示例在 C++):
class Obj
{
public:
struct Param{
std::string name;
std::string value;
};
std::string text;
std::string name;
std::list<Param> params;
std::list<Obj *> children;
};
然后,您需要添加一些帮助程序,以将值字符串(XML)转换为整数,双精度,布尔值等,并清理多余的空格。 您可能还希望添加一些代码来获取名为"XYZ"的所有根对象,这样您就不必一直手动循环。
这应该可以让您了解从哪里开始。 这真的不难。
如果您不想使用现有库,则需要自己构造 XML 解析器。您无法有效地手动分析 XML。
我建议您学习以下基本概念:
- 正则表达式
- DFA/NFA
- 词法分析器/扫描仪 语法
- 类型(至少学习常规语法和上下文自由语法)
- BNF, EBNF
- 递归下降分析
免费参加这门很棒的课程:https://www.coursera.org/course/compilers
如果您不受时间限制,请将其视为学习机会。
祝你好运!
扫描 xml 文件并检查到 ('>' 和 !=''),并开始存储高达 '<'
相关文章:
- 删除 XML 文件中的子节点C++
- 使用 RapidXML 更新C++中的 XML 节点和属性值
- 如何让用户在 tinyxml2 中输入 XML 文件的路径
- 使用 TinyXML2 读取 C++ 中的 XML 文件
- 如何使用 word 对象模型中的C++接口在 word 中添加自定义 XML 艺术
- C 从XML导入CAPI/CNG中的RSA私钥
- 如何在Qt中解析未知的xml并获取其中的所有属性
- 如何使用libxml2从C 中的XML文件中检索节点和特定元素字符串而不使用XPATH
- 如何使用XPath使用libxml2从C 中的XML文件中检索节点和特定元素字符串
- 在没有库的情况下解析 C 中的 XML
- 在 vim 中自动关闭 C/C++ 文件中的 xml 标记
- IOS上的OpenCV haar级联了C++中的xml文件路径问题
- ADO 不支持存储过程中的 XML
- 如何自动格式化和缩进字符串中的 XML
- 使用 cpp 在 opencv 中的 xml 文件中追加元素
- Qt中的XML表示法不一致
- 如何将数据写入opencv文件夹中的xml文件
- c++中的XML数据绑定,具有简单的非侵入性数据模型
- c++中的XML序列化/反序列化
- 解析C/ c++中的XML文件(二叉树森林)