libxml2,带有默认的sax处理程序和自定义错误处理程序

时间:2013-02-11 19:31:27

标签: c++ libxml2 custom-error-handling

我想通过以下方式在C ++程序中使用一个简单的libxml2解析器:

  1. 默认的sax处理程序很好(实际上我想避免编写自己的工作。我明白我可以用自定义sax处理程序做我想做的事)
  2. 解析器应该嵌入到可以任意实例化的C ++类中(可能是多线程的),libxml2解析器上下文作为成员var
  3. 还有其他组件也使用libxml2但不受我的控制(我不能 准确地说出他们做了什么以及他们如何使用libxml2)
  4. 在C ++类中我想使用一个自定义错误处理程序,它不只是打印到stderr但我想收集错误并抛出异常
  5. 示例:

    class XmlParser
    {
      public:
        XmlDoc * parseText(const char * txt, ...);
    
      private:
        xmlParserCtxtPtr ctx;
    
        static void xmlErrorHandler(void * userData, xmlErrorPtr err);
    }
    

    这是不起作用的(对我的测试和理解):

    • 使用xmlSetStructuredErrorFunc()或xmlSetGenericErrorFunc()并将当前C ++实例设置为用户数据,因为这些func只设置了一个全局var(不是线程安全的)
    • 使用xmlNewParserCtxt()并将ctx-> sax-> serror设置为常规C ++方法 - 错误处理程序必须是静态的
    • 与之前的相同但是使用静态类方法 - 实际上它确实有效,但同时我想设置ctx-> user_data(到当前C ++实例的'this') - 这会使解析器崩溃,它看起来好像在libxml2内部ctx-> user_data通过应该只有ctx的函数传递...但是这种情况一直发生,即看起来像一个特征而不是一个bug :-)

    现在,有人知道如何让它发挥作用吗?

    很多thx !!!

0 个答案:

没有答案