xerces dom xml解析

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。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值