任何人都可以给我一个关于仅使用标准库在独立C中解析xml的过程的概述。
我希望将此作为实践工作,因为这实际上是一个有用的项目。
我看到的大多数示例似乎都使用了很多指针以及结构数组。所以任何提示或大纲都会受到赞赏。
答案 0 :(得分:5)
嗯,你会看到两件不同的事情。第一个是实现这一目标的高级战略。第二个是数据结构和其他语言特定的实现细节,你将用它来完成它。
对于高级部分,一个好的起点是研究有限自动机。它们是一个非常强大的概念工具,用于规划解析和其他重度状态依赖的作业,并且很容易转换为代码。
对于实现细节......好吧,有人已经指出了树结构。当你开始使用XML时,XML基本上就是一棵树了。
答案 1 :(得分:0)
非常简单,你只需阅读文本并将其构建到对象树中。
如果你有以下简单的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)之间进行转换,以整数,双精度,bool等,并清理额外的空格。您可能还想添加一些代码来获取名为“XYZ”的所有根对象,这样您就不必一直手动循环。
这应该可以让您了解从哪里开始。这真的不是那么难。
答案 2 :(得分:0)
如果您不想使用现有库,则需要自己构建XML解析器。你无法有效地手工解析XML。
我建议你选择基本概念:
免费参加这个精彩的课程:https://www.coursera.org/course/compilers
如果您不受时间限制,请将此作为学习机会。
祝你好运!答案 3 :(得分:0)
扫描xml文件并检查('&gt;'和!='\ n')并开始将值存储到'&lt;'