c - C语言高效解析XML字符串

标签 c xml-parsing

我需要在 C 中解析由 API 返回的 XML 编码字符串,并查找特定标记及其值。实现这一目标的最有效方法是什么?我不能使用非标准库或第 3 方库,例如 Boost。

最佳答案

我在类(class)中做到了。

您应该使用链表来解析您的文档。

我采用的方法(这种方法非常有效)是先在开头的“<”之后直接解析 char*,然后遍历所有内容,直到找到结尾的“>”。将每个单词放入一个数组中是个好主意。

这意味着,您在此之前阅读的所有内容都与数组中的第一个 char * 相关联。

之后,您只需再解析 2 个东西,即属性及其值。属性以'='结尾,这意味着从前一个空格字符到这个'='符号,是属性,'='字符后面的所有内容到下一个'',都是它的值。

<model name="Homo sapiens Glycolysis" id="Pathway146">

这里,“model”是标签,“name”是属性,“Homo sapiens Glycolysis”是它的值。

然后,当您成功解析这些字符串时,填充您的链表。每个节点都是一个新标签。

这样,当要求查找特定字段时,只需从列表开始(从头开始)到最后,搜索特定标记、属性或值。 找到后,显示整个节点。

这是我的 .h,如果它有帮助的话。

typedef struct   s_elem {
  char           *tag;
  char           **attributes;
  char           **values;
  struct s_elem  *next;
  struct s_elem  *prev;
} t_elem;

typedef struct   s_list {
  struct s_elem  *first;
  struct s_elem  *last;
} t_list;

这不是唯一的方法。您可以将属性及其值存储到单个字符串中,但您必须打印它并注意“=”。

希望对您有所帮助。

关于c - C语言高效解析XML字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937371/

相关文章:

c - 数据结构: Circular Queue (in C)

c printf(%*s) 解释

Java 正则表达式或 XML 解析器?

java - 用xml编写的文件描述符

xml - xpath 从 child 那里获得值(value)

使用 Tcl 脚本更改 XML 中的标签名称

c - WM_SIZE 消息是否被发送到消息队列?

python - 使用 lxml 解析具有嵌套命名空间的 XML 属性

java - 使用 xstream 将 xml 作为字符串而不是类获取

c - 如何在 C 的条件语句中使用字符串数组?