设为首页收藏本站

爱乐眼底图像分析

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5344|回复: 1

Xercesc读取xml文件

[复制链接]
发表于 2012-8-25 22:06:09 | 显示全部楼层 |阅读模式
本节包含内容:XML文件格式、判断节点类型、取节点名称、取节点值。

XML文件的典型格式,如下

<节点名称1>

  <节点名称1-1     属性名1=属性值1   属性名2=属性值2>

<节点名称1-1-1>  <!- 节点名为 节点名称1-1-1节点值无  -->

    Context    <!- 节点名为#text 节点值为Context  -->

              <!- 若Context为空,则没有#text节点  -->

</节点名称1-1-1>

  </节点名称1-1>

  <节点名称 1-2>

  </节点名称1-2>

</节点名称1>

参考Domcount例程,得到DOMNode对象

首先判断DOMNode对象的节点类型、然后,对节点内容和值分别存储。

if (static_cast<DOMNode *>(n)->getNodeType() == DOMNode::ELEMENT_NODE)

{

    //取节点名称。这里取节点值是没有意义的

    char *name  = XMLString::transcode(static_cast<DOMNode *>(n)->getNodeName());

     pThis->m_strName  = name; //存放节点名称

     XMLString::release(&name);

   

     //如果本节点有属性,存储属性信息到pThis对象.begin

     if(static_cast<DOMNode *>(n)->hasAttributes()) {

         // get all the attributes of the node

         DOMNamedNodeMap *pAttributes = static_cast<DOMNode *>(n)->getAttributes();

         const XMLSize_t nSize = pAttributes->getLength();

         std::string strKey,strValue;  //用来存放属性名和属性值

         for(XMLSize_t i=0;i<nSize;++i) {

              DOMAttr *pAttributeNode = (DOMAttr*) pAttributes->item(i);

              // get attribute name

              char *name = XMLString::transcode(pAttributeNode->getName());

               // get attribute type

              char *value = XMLString::transcode(pAttributeNode->getValue());

              //存放属性名和属性值

              strKey = name,strValue=value,pThis->m_mapAttr[strKey]=strValue;

              XMLString::release(&name);

              XMLString::release(&value);

     }

     //如果本节点有属性,存储属性信息到pThis对象.end

}

Else if (static_cast<DOMNode *>(n)->getNodeType() == DOMNode::TEXT_NODE)

{

      //节点名为#text的节点,可以取其节点值

      //… omit some code …

      char *value = XMLString::transcode(static_cast<DOMNode *>(n)->getNodeValue());

//… omit some code …

}

备注:Xercesc直接支持UTF-8编码的中文。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



QQ|Archiver|手机版|小黑屋|爱乐眼底图像分析 ( 京ICP备1201155号          

GMT+8, 2020-10-23 16:47 , Processed in 0.155763 second(s), 30 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表