C/C++,libxml2:解析HTML片段
C/C++, libxml2: parsing HTML fragments
我需要解析现实生活中的HTML文档。在大多数情况下,它们都是良好的形式,但有时(这一点不容忽视),它们看起来像在根级别具有多个同级的片段
示例:
<div>one</div>
<div>two</div>
现在,我使用带有以下解析标志的libxml2 v2.7.8:
HTML_PARSE_NOERROR | HTML_PARSE_RECOVER | HTML_PARSE_NODEFDTD | HTML_PARSE_NOIMPLIED
如果我给它提供上面的例子,然后从解析的文档中转储HTML:
<div>one<div>two</div></div>
正如你所看到的,它嵌套了元素,而我的要求是不要破坏HTML。此外,我希望能够在由这些片段创建的树上运行XPath表达式。在这种情况下,要获得第二个DIV,可以使用"/DIV[2]"。
所以问题是是否有可能解析这些类型的HTML,以及如何解析?
我想您需要html到xml的转换。在Java中,我使用JSoup,但stackoverflow肯定知道如何在c中做到这一点
PHP的DOM组件使用Libxml2。使用PHP时,我发现了以下解决方法:
<?php
echo DOMDocument::loadHTML("<b>Bold</b> <i>Italic</i>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD)->saveHTML();
echo DOMDocument::loadHTML("<div><b>Bold</b> <i>Italic</i>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD)->saveHTML();
输出:
<b>Bold<i>Italic</i></b>
<div><b>Bold</b> <i>Italic</i></div>
因此,对于不可否认的有点棘手的答案,只需在输入字符串前加上<div>
,然后从输出字符串中删除<div>
和</div>
。
相关文章:
- 继承函数的重载解析
- 在 C++ 中编写解析器来解析给定的 HTML 实体
- 当我使用 QDomDocument 解析 html 数据时,如何保留 "?
- 解析来自 HTML 代码C++的 URL
- 带有 HTML 报告生成器的 c++ XML 解析器的体系结构
- 在银光下解析html嵌入窗户的窗户
- 如何从 POCO websocket 服务器解析 html 页面
- 如何解析html并获取信息
- 语法错误:html 映射文件中的解析错误 - ogmaps 引用错误:找不到变量:GUnload
- 有人可以解释为什么我的XML解析器跳过这些HTML元素的原因
- 使用 pugixml 或实际的 HTML 解析器进行 HTML 解析
- Qt-html解析未找到任何标记
- C/C++,libxml2:解析HTML片段
- 类似J汤的C++html解析器
- 用C++解析文本文件(其中包含HTML)
- Qt 5在Android上解析HTML
- Xerces-C:在HTML中解析Javascript
- 如何使用BoostptreeC++解析值中包含HTML标记的XML
- 如何在CGI应用程序中解析HTML文件并修改其内容?C++
- c++ Xerces解析器加载HTML并搜索HTML元素