czz 发表于 2012-8-25 22:06:09

Xercesc读取xml文件

本节包含内容: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=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编码的中文。
页: [1]
查看完整版本: Xercesc读取xml文件