遍历XML树的递归和非递归算法
2010-11-01 09:25
127 查看
int ContentCompare::printChildrenNames(xmlNodePtr cur)
{
//使用非递归遍历
list<xmlNodePtr> listXMLNodePtr;
xmlNodePtr tempNodePtr;
listXMLNodePtr.push_back(cur);
cout << cur->name << " >> " << endl;
while (!listXMLNodePtr.empty())
{
tempNodePtr = listXMLNodePtr.front();
listXMLNodePtr.pop_front();
if ( tempNodePtr == NULL )
{
cout << "作为参数的节点指针为NULL" << endl;
return _FAILURE_;
}
const xmlChar* szTemp = tempNodePtr->name;
//遍历temp的子节点,包含元素子节点和文本子节点
for ( tempNodePtr = tempNodePtr->xmlChildrenNode; tempNodePtr != NULL; tempNodePtr = tempNodePtr->next )
{
if ( tempNodePtr->type == XML_COMMENT_NODE ) //注释节点
continue;
cout << szTemp << " >> " << tempNodePtr ->name << " = "
<< xmlNodeGetContent( tempNodePtr ) << endl << endl;
if ( tempNodePtr->xmlChildrenNode != NULL ) //文本节点或没有子节点的元素节点
listXMLNodePtr.push_back(tempNodePtr);
}
}
return _SUCCESS_;
}
int ContentCompare::printChildrenNames(xmlNodePtr cur)
{
//使用递归遍历
if (cur == NULL || cur->xmlChildrenNode == NULL )
return;
xmlNodePtr tempNodePtr;
const xmlChar* szTemp = cur->name;
for ( cur = cur->xmlChildrenNode; cur != NULL; cur = cur->next )
{
cout << szTemp << ">>" << cur ->name << " = " << xmlNodeGetContent( cur ) << endl;
//文本节点
if ( cur ->type == 3 ) //cur ->xmlChildrenNode == NULL没有子节点的节点
continue;
tempNodePtr = cur;
printChildrenNames(cur);
cur = tempNodePtr;
}
return _SUCCESS_;
}
{
//使用非递归遍历
list<xmlNodePtr> listXMLNodePtr;
xmlNodePtr tempNodePtr;
listXMLNodePtr.push_back(cur);
cout << cur->name << " >> " << endl;
while (!listXMLNodePtr.empty())
{
tempNodePtr = listXMLNodePtr.front();
listXMLNodePtr.pop_front();
if ( tempNodePtr == NULL )
{
cout << "作为参数的节点指针为NULL" << endl;
return _FAILURE_;
}
const xmlChar* szTemp = tempNodePtr->name;
//遍历temp的子节点,包含元素子节点和文本子节点
for ( tempNodePtr = tempNodePtr->xmlChildrenNode; tempNodePtr != NULL; tempNodePtr = tempNodePtr->next )
{
if ( tempNodePtr->type == XML_COMMENT_NODE ) //注释节点
continue;
cout << szTemp << " >> " << tempNodePtr ->name << " = "
<< xmlNodeGetContent( tempNodePtr ) << endl << endl;
if ( tempNodePtr->xmlChildrenNode != NULL ) //文本节点或没有子节点的元素节点
listXMLNodePtr.push_back(tempNodePtr);
}
}
return _SUCCESS_;
}
int ContentCompare::printChildrenNames(xmlNodePtr cur)
{
//使用递归遍历
if (cur == NULL || cur->xmlChildrenNode == NULL )
return;
xmlNodePtr tempNodePtr;
const xmlChar* szTemp = cur->name;
for ( cur = cur->xmlChildrenNode; cur != NULL; cur = cur->next )
{
cout << szTemp << ">>" << cur ->name << " = " << xmlNodeGetContent( cur ) << endl;
//文本节点
if ( cur ->type == 3 ) //cur ->xmlChildrenNode == NULL没有子节点的节点
continue;
tempNodePtr = cur;
printChildrenNames(cur);
cur = tempNodePtr;
}
return _SUCCESS_;
}
相关文章推荐
- 关于‘Dom4j递归遍历XML所有元素 ’的一点看法
- 二叉树中序遍历和后序遍历的递归与非递归算法
- java非递归实现Xml的遍历(多叉树遍历)
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- (1)建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出对用二叉链表存储的二叉树进行层次遍历算法。 (4)求二叉树的所有叶子及结点总数。
- 着重介绍了非递归算法,特别是非递归后续遍历
- 遍历磁盘文件的递归和非递归算法
- 二叉树的递归遍历与非递归算法实现
- (前、中、后)序遍历二叉树的递归、非递归算法!
- 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
- C++ 实现求二叉树的深度及遍历(递归与非递归算法)
- 遍历二叉树-递归和非递归算法
- Dom4j递归遍历XML所有元素
- Java递归遍历XML所有元素。
- 循环递归遍历XML文档或按某要求遍历XML文档
- XML遍历文档树(广度优先与递归)
- 递归遍历XML文档
- 前序 中序 后序 遍历 递归 非递归算法 java实现
- 二叉树先序中序后序遍历递归和非递归算法
- 递归遍历XML节点属性和属性值