本节包含内容: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编码的中文。
|