【发布时间】:2014-08-02 06:50:37
【问题描述】:
我在使用TinyXML2 来盲目地解析特定标签的XML 页面时遇到问题。
基本上,我被要求通过 C++ 解析 HTML 页面。我使用(相当旧的)tidyHTML 库首先将我的 HTML 页面“翻译”成 XML 页面。然后,我想使用 TinyXML2 来解析这些新创建的 XML 页面以获取 特定标签的内容(标题、h1、元关键字,...)。
为此,我尝试使用以下代码遍历我的 XML 页面中的所有标签:
XMLDocument doc;
doc.Parse( cleanedHTML.c_str() );
XMLNode* currentNode;
if(currentNode->NoChildren())
{
while(!currentNode->NextSibling())
{
currentNode=currentNode->Parent();
if(!currentNode)
return NULL;
}
currentNode=currentNode->NextSibling();
}
else
{
currentNode=currentNode->FirstChild();
}
doc.Print();
std::string nodeName = currentNode->LastChild()->Value();
return nodeName;
这段代码可能有一些问题 - 毫无疑问,我显然是个业余爱好者。但结果仍然让我感到困惑:无论我在解析哪个页面,nodeName 都会返回“USER=root”。
我尝试选择此节点的相关元素,例如 currentNode->FirstChildElement() 或 LastChildElement(),甚至是 Siblings...但每次它都会导致 分段错误。
我读到 Xpath 将是做我想做的事情的好方法,但是我又一次没时间了,我担心我做不到在如此相对较短的时间内将我的思想包裹在 Xpath 上。
我可能看错了,或者我应该使用 Accept() 吗?
老实说,我在这里感到有些失落,并希望你们能提供任何帮助!
我想迅速借此机会也感谢这个网站,它在过去的。
真是太棒了。
提前感谢您的回复!
【问题讨论】:
-
您是否验证过“已清理”的 XML 实际上是 有效 XML?
-
嗯,我首先尝试使用一个非常简单的代码(6 个元素和十几个节点顶部),然后...... xmlvalidation.com 没有遇到任何错误。我现在将尝试类似地解析,但只解析 ELEMENTS 并通过 FOR 循环。
标签: c++ xml xml-parsing tinyxml