gpt4 book ai didi

c - expat 函数 XML_StartElementHandler - 如何使用它?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:28 24 4
gpt4 key购买 nike

我正在使用 expat 编写 xml 解析器。刚看到这个:

XML_SetElementHandler
XML_Parser parser,
XML_StartElementHandler start,
XML_EndElementHandler end

我不明白它应该做什么我看到它是一个指向函数的指针:

typedef void (*XML_StartElementHandler)(void *userData,
const XML_Char *name,
const XML_Char **atts);

但我找不到它应该做什么很想得到一些帮助!

最佳答案

您给解析器(指向)两个函数,其中一个在解析器看到 XML 元素的开始时调用(即,一旦它读取开始标记),另一个在它看到元素的结尾(即读取结束标记)(您确实必须了解元素和标记之间的区别才能进行 XML 解析)。

解析器在元素开头调用的函数使用三个参数调用:

  1. 一个通用的 (void *) 指针,指向您最初作为“用户数据”传递给解析器的任何内容(如果您确实传递了它)。这是您想用来在回调之间保持状态的任何内容。
  2. 指向包含元素名称文本的字符数组(即字符串)的指针。
  3. 一个指向字符串数组的指针(好吧,我在这里不是迂腐地正确),与元素关联的属性值对的每个部分都有一个成员(即开始标记中列出的属性)。所以,如果 atts[i] 是属性,那么 atts[i+1] 就是它的值。

在元素末尾调用的函数具有较短的参数签名(同样是 IIRC),因为它不会获取属性列表。

对于最常用的 XML,您还需要一个字符处理函数来处理字符数据(即开始标记和结束标记之间的内容),并且您需要反复提醒自己它会 < em>not,一般来说,一次调用所有字符数据;该数据可能来自几个单独的“ block ”。

关于c - expat 函数 XML_StartElementHandler - 如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com