美文网首页
xerces-c解析xml节点示例

xerces-c解析xml节点示例

作者: 一路向后 | 来源:发表于2022-03-31 21:58 被阅读0次

1.源码实现

#include <iostream>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>

using namespace std;
using namespace xercesc;

int main(int argc, char **argv)
{
    //初始化环境
    XMLPlatformUtils::Initialize();

    //获取解析器
    XercesDOMParser *parser = new XercesDOMParser();

    //设置支持命名空间
    parser->setDoNamespaces(true);

    parser->setValidationScheme(XercesDOMParser::Val_Always);

    ErrorHandler *errHandler = (ErrorHandler *)new HandlerBase();

    //设置错误返回
    parser->setErrorHandler(errHandler);

    //加载xml
    parser->parse("aaa.xml");

    //得到文档结构
    DOMDocument *doc = parser->getDocument();

    //读取根节点
    DOMElement *root = doc->getDocumentElement();

    //获取子元素
    const XMLCh *from = XMLString::transcode("from");
    DOMNodeList *childs = root->getElementsByTagName(from);
    DOMNode *child = childs->item(0);

    cout << childs << endl;
    cout << child << endl;

    char *name = XMLString::transcode(child->getNodeName());
    char *content = XMLString::transcode(child->getFirstChild()->getNodeValue());

    cout << name << endl;
    cout << content << endl;

    //释放解析器
    delete errHandler;
    delete parser;

    return 0;
}

2.aaa.xml

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

3.编译源码

$ g++ -o test test.cpp -std=c++11 -lxerces-c

4.运行及其结果

$ ./test
0x815b88
0x8155a8
from
Jani

相关文章

网友评论

      本文标题:xerces-c解析xml节点示例

      本文链接:https://www.haomeiwen.com/subject/afqojrtx.html