在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
需要覆盖在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