当前位置: 首页 > 工具软件 > Xerces > 使用案例 >

使用xerces-c时相关问题记录

顾淳
2023-12-01

1.在使用SAX解析器xerces-c时,如何获取行号:

在DefaultHandler中有一个

virtual void setDocumentLocator(const Locator* const locator);

的虚函数,覆盖此函数,可以拿到定位器Locator的指针,在后续的解析中就可以使用它。
例如:

private:
	const xercesc::Locator* m_locator = nullptr;
void setDocumentLocator(const xercesc::Locator* const locator) override {
    m_locator = locator;
  }
void startElement(
    const XMLCh* const uri,
    const XMLCh* const localname,
    const XMLCh* const qname,
    const xercesc::Attributes& attrs) override {
    if(m_locator) {
      XMLFileLoc row = m_locator->getLineNumber();//获取行号
    }
  }

参考:https://www.orcode.com/question/90331_k9751c.html

2.在使用xerces-c时,如何获取注释信息:

需要覆盖在DefaultHandler中的虚函数comment,而comment继承至父类LexicalHandler

/** @name Default implementation of LexicalHandler interface. */

    //@{
   /**
    * Receive notification of comments.
    *
    * <p>The Parser will call this method to report each occurrence of
    * a comment in the XML document.</p>
    */
    virtual void comment
    (
        const   XMLCh* const    chars
        , const XMLSize_t       length
    );

所以需要先使用xercesc::setLexicalHandler这个函数进行注册;

需要CDATA、DTD相关信息的时候,也需要进行相应的注册。

官方文档:https://xerces.apache.org/xerces-c/apiDocs-3/classDefaultHandler.html

 类似资料: