盲目地解析XML页面以查找特定的标记
Blindly parse XML page for specific tags
我在使用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(),甚至兄弟姐妹…但是每次它都会导致分割故障,这是我无法理解的。
我已经读到Xpath将是完成我正在尝试做的事情的好方法,但是我又一次没有时间了,我担心我无法在这么短的时间内把我的思想集中在Xpath上。
我可能正在看所有错误的方式,或者我应该使用Accept() ?
老实说,我在这里感到有点失落,我会很感激你们提供的任何帮助!
我想迅速利用这个机会也感谢这个网站在过去帮助了我这么多。不可思议。
提前感谢您的回复!
既然我已经完成了我的项目,我终于可以回答这个问题了:
我正在寻找的确实是Accept()和Visitors。我必须实例化一个Visitor,添加他的"遭遇"可能产生的任何特殊效果,并将其放入我的doc.Accept();
例如,如果我想在字符串中获得已解析页面的标题,我会这样做:
bool MyVisitor::VisitEnter(const XMLElement& element, const XMLAttribute* attribute)
if(strcmp( element.Name(), "title") == 0)
{
if(element.GetText() != NULL)
{
titleContent = element.GetText();
}
else
titleContent = "";
}
…然后返回一个经典的 MyVisitor::getTitle()函数,你可以在任何你需要的地方调用它。
希望它有帮助,如果有人想要更多的细节,我可以提供工作& &;扩展代码。
我已经发现Google发布了gumbo解析器所以…是的。
显然都更好&比使用TinyXML-2解析HTML5更容易:D
您可能想要考虑使用一个解析器,它可以提供更好的示例,您可以将其作为工具的基础…例如,Apache Xerces-C的SAX API示例可以被改编。
(我对TinyXML2和它支持的api一无所知,所以我不能建议你如何在现有的代码中修复这个问题。)
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- Cppcheck生成xml转储文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 算法问题:查找从堆栈中弹出的所有序列
- 在Windows中查找扬声器输出的当前音量级别
- 如何在C++中使用X509证书模在令牌中查找私钥
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 如何在pugixml中获取节点的内部XML
- 在二进制格式的xml文件中查找关键字
- 使用 TinyXML 在 XML 文档中查找特定节点
- 盲目地解析XML页面以查找特定的标记
- 解析xml文件并查找任何错误