C++ 在没有库的情况下用C解析XML。
有谁能给我一个关于在只有标准库的独立C中解析xml的过程的概述吗 我想把它作为一种实践,因为这实际上是一个有用的项目C++ 在没有库的情况下用C解析XML。,c++,c,xml,algorithm,parsing,C++,C,Xml,Algorithm,Parsing,有谁能给我一个关于在只有标准库的独立C中解析xml的过程的概述吗 我想把它作为一种实践,因为这实际上是一个有用的项目 我看到的大多数示例似乎都大量使用指针和结构数组。因此,任何提示或提纲都将不胜感激。嗯,您将看到两个不同的方面。首先是实现这一目标的高级别战略。第二个是数据结构和其他特定于语言的实现细节 对于高级部分,一个好的起点是研究有限自动机。它们是一个非常强大的概念工具,用于规划解析和其他严重依赖于状态的作业,并且可以很容易地转换为代码 有关实施细节。。。有人已经指出了树的结构。XML基本上
我看到的大多数示例似乎都大量使用指针和结构数组。因此,任何提示或提纲都将不胜感激。嗯,您将看到两个不同的方面。首先是实现这一目标的高级别战略。第二个是数据结构和其他特定于语言的实现细节 对于高级部分,一个好的起点是研究有限自动机。它们是一个非常强大的概念工具,用于规划解析和其他严重依赖于状态的作业,并且可以很容易地转换为代码
有关实施细节。。。有人已经指出了树的结构。XML基本上是一棵树。非常简单,只需读入文本并将其构建到对象树中即可 如果您有以下简单的XML:
<A>Hello<B x="1">World</B></A>
<A>Another Object A</A>
使用这样的简单类对象,可以构建树(我意识到你问的是在正则C中解析它,但你也标记了C++,所以我的例子是C++):
类Obj
{
公众:
结构参数{
std::字符串名;
std::字符串值;
};
std::字符串文本;
std::字符串名;
std::列表参数;
性病:列出儿童;
};
然后,您需要添加一些帮助程序来将值字符串(XML就是这样)转换为整数、double、bools等,并清除多余的空白。您可能还需要添加一些代码来获取所有名为“XYZ”的根对象,这样就不必一直手动循环
这会让你知道从哪里开始。这真的没那么难。如果您不想使用现有的库,您需要自己构造XML解析器。您无法手动高效地解析XML 我建议您学习以下方面的基本概念:
祝你好运 扫描xml文件并检查('>'和!='\n'),然后开始存储值,直到“嗯,您将从文件中的数据构建一个树结构。这个问题在编译器的前端是很重要的,通常的编译器文本是开始的地方。我写了很多玩具程序,但是手工解析XML是我从来都不想做的事情。你有没有做这方面的资源?或者我可以看看基本的实现。正如前面提到的,这确实是一个大而复杂的项目,可能需要相当长的时间。你考虑过像.ini这样更简单的格式吗?@sdsd:它不是那么高级,而是毫无意义。它是为其编写解析器最不有趣的语言(因为它几乎不是一种语言),但它却有所有关于名称空间、URI、编码等的恼人规则。
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"
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;
};