libxml庫中的xmlElementType

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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章