http://xerces.apache.org/xerces-c/program-dom-3.html#UsingDOMAPI


有三种解析器:XercesDOMParser,DOMLSParser,DOMLSSerializer。

三个有用的类:

   DOMDocument*   myDocument;
   DOMNode*       aNode;
   DOMText*       someText;


举例:

XMLPlatformUtils::Initialize();

parser = new XercesDOMParser();
parser->setValidationScheme( XercesDOMParser::Val_Always );
parser->setDoNamespaces( true ); // optional

设置错误处理
ErrorHandler* err_Handler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler( err_Handler );

// reset document pool
parser->resetDocumentPool();


解析方式:

  1. parser->parse(xml_file);  // std::string xml_file_name;
  2. MemBufInputSource myxml_buf((const XMLByte*)xmlbuf,strlen(xmlbuf), "test");         parser->parse(myxml_buf);

解析结果:
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc = 0;

doc = parser->getDocument();

DOMNode* root = (DOMNode*) doc->getDocumentElement();


DOMNode *child    = 0;
for (child = root->getFirstChild(); child != 0; child  = child->getNextSibling()) 
{
       if (child->getNodeType() != DOMNode::ELEMENT_NODE) ............
       char * xml_string = XMLString::transcode(child->getNodeName());

       DOMNamedNodeMap *pAttributes = child->getAttributes();  ---------------- 取属性表

const XMLCh *attrDef = XMLString::transcode(attr_name);   ---------------- 把属性名字符串转变一下存起来;
DOMNode *node = pAttributes->getNamedItem(attrDef);       ----------------- 根据属性名取出属性
XMLString::release((XMLCh**) (&attrDef));                ---------------- 记得和XMLString::transcode配对使用,否则内存泄露。
        char *pc = XMLString::transcode(node->getNodeValue());           ---------------- 把属性转变为char *

注:XMLString::transcode有三种可能的返回值:bool,char *,XMLCh*;release有两种输入值char**,XMLCh** buf。




Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐