- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 htmlcxx library读取 HTML 文件并生成具有附加内容的相同 HTML 文件。
我可以毫无问题地读取文件,但简单地发出原始 HTML 文件并不能正确包含结束标记。也就是说,当我简单地迭代并输出整个 DOM 时,不会发出结束标记。
我知道节点有一个closingText()
接口(interface)(参见Node.h
),但我似乎找不到使用它的方法这让我可以做我需要做的事。
下面是我如何转储 DOM:
it = dom.begin();
end = dom.end();
for (; it != end; ++it)
{
cout << it->text();
}
上面给了我:
<div>
<li>
<div>
(blank)
(blank)
(blank)
<div>
(blank)
对于以下 html:
<div>
<li>
<div>
</div>
</li>
</div>
<div>
</div>
除了更改代码,我还能做些什么吗?
最佳答案
这个库实际上没有提供文档,只有非常的一小部分示例代码。树操作已从 http://tree.phi-sci.com 解除。该网站有更多的文档,但没有太多额外的示例代码。
我见过的每个示例都使用基本的“深度优先”迭代器,它允许您使用简单的 for 循环遍历树。这似乎不是很有用,因为要序列化 HTML 树,您确实需要使用递归。
我四处乱砍,直到我得到一个可以工作的递归算法。这可能不是使用该库的最佳方式,但它似乎可行。
void walk_tree( tree<HTML::Node> const & dom )
{
tree<HTML::Node>::iterator it = dom.begin();
cout << it->text();
for ( unsigned i = 0; i < dom.number_of_children(it); i++ )
{
walk_tree( dom.child(it, i) );
}
cout << it->closingText();
}
正如您从我的代码中看到的那样,text()
和 closingText()
函数将递归处理的子树中包含的任何内容括起来。
关于c++ - htmlcxx API 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480570/
我尝试使用 htmlcxx 来解析网页。问题是,这个例子不是可编译的 atm。 tree::iterator it = dom.begin(); tree::iterator end = dom.en
包括 #include #include #include #include #include using namespace std; using namespace ht
我从不同的人那里读到了许多关于库抓取 HTML 的不同问题。我决定使用 htmlcxx,因为它看起来很简单,而且它在 Ubuntu 存储库中。无论如何,在玩 htmlcxx 时,我试图完成一个简单的任
我正在使用 htmlcxx library读取 HTML 文件并生成具有附加内容的相同 HTML 文件。 我可以毫无问题地读取文件,但简单地发出原始 HTML 文件并不能正确包含结束标记。也就是说,当
如何显示显示文本和标签及其属性的 html 树。我会很感激 htmlcxx 的任何体面的手册或文档,我找不到任何帮助自己的东西。 最佳答案 我认为您的问题与其他 SO 线程非常相似。所提供的答案应该可
#include #include #include #include #include #include using namespace std; using namespace htm
我正在为一个简单的程序使用 htmlcxx 库,但我遇到了一个问题,我搜索了许多其他相关的解决方案,但我的问题仍然是一个问题,希望有人能帮助我,这是我在 Kdevelop 上使用的代码Ubuntu:
我是一名优秀的程序员,十分优秀!