【问题标题】:how to use contexts in SAX XML parsing in C++(using libxml2)?如何在 C++ 中使用 SAX XML 解析中的上下文(使用 libxml2)?
【发布时间】:2014-07-15 09:21:15
【问题描述】:

我正在使用 libxml2 库在 C++ 中编写一个 xml 解析器应用程序。我使用 startElementNsSAX2Func 解析元素并使用 charactersSAXFunc 解析元素值。

签名:

void    startElementNsSAX2Func  (void * ctx, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int nb_defaulted, const xmlChar ** attributes)
void    charactersSAXFunc(void * ctx, const xmlChar * ch, int len)

我想利用 ctx 变量,以便我可以根据元素的顺序解析 xml 文档,但我不知道该怎么做。对此的任何见解都会非常有帮助。

我也找不到一篇关于 C/C++ 中 XML SAX 解析的好文章。有人知道这方面的好教程吗?

感谢您的帮助!

【问题讨论】:

    标签: c++ xml xml-parsing libxml2 saxparser


    【解决方案1】:

    SAX 回调的ctx 参数将保存作为user_data 传递给xmlCreatePushParserCtxtxmlCreateIOParserCtxt 等初始化函数的指针:

    xmlParserCtxtPtr xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax, 
                                              void * user_data, 
                                              const char * chunk, 
                                              int size, 
                                              const char * filename)
    

    它可以用来传递一个指向任意用户定义结构的指针。此结构通常包含一个状态变量,可用于确定文档树中的当前位置。

    一个不错的教程可以是found here。它使用已弃用的 SAX1 接口,但 SAX2 接口类似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2013-01-13
      • 2012-12-16
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多