libxml库中的xmlElementType
解析xml文件遍历DOM结点的时候需要注意判断xmlElementType,只当nodePtr->type == XML_ELEMENT_NODE时才去取结点的属性,内容。
xmlElementType类型定义如下:
typedef enum {
XML_ELEMENT_NODE= 1,
XML_ATTRIBUTE_NODE= 2,
XML_TEXT_NODE= 3,
XML_CDATA_SECTION_NODE= 4,
XML_ENTITY_REF_NODE= 5,
XML_ENTITY_NODE= 6,
XML_PI_NODE= 7,
XML_COMMENT_NODE= 8,
XML_DOCUMENT_NODE= 9,
XML_DOCUMENT_TYPE_NODE= 10,
XML_DOCUMENT_FRAG_NODE= 11,
XML_NOTATION_NODE= 12,
XML_HTML_DOCUMENT_NODE= 13,
XML_DTD_NODE= 14,
XML_ELEMENT_DECL= 15,
XML_ATTRIBUTE_DECL= 16,
XML_ENTITY_DECL= 17,
XML_NAMESPACE_DECL= 18,
XML_XINCLUDE_START= 19,
XML_XINCLUDE_END= 20
#ifdef LIBXML_DOCB_ENABLED
,XML_DOCB_DOCUMENT_NODE= 21
#endif
} xmlElementType;
用法如下:
xmlNodePtr root = xmlDocGetRootElement(doc);
if (root == NULL) {
xmlFreeDoc(doc);
}
xmlNodePtr nodePtr = root->xmlChildrenNode;
while (nodePtr) {
//当结点的类型XML_ELEMENT_NODE时才获取属性
if (nodePtr->type == XML_ELEMENT_NODE) {
xmlChar *attrName = xmlGetProp(nodePtr, (const xmlChar *)"name");
xmlChar *attrPort = xmlGetProp(nodePtr, (const xmlChar *)"port");
xmlChar *attrDeviceIP= xmlGetProp(nodePtr, (const xmlChar *)"deviceIp");
}
nodePtr = nodePtr->next;
}
xmlFreeDoc(doc);