gpt4 book ai didi

c++ - htmlcxx API 用法

转载 作者:太空狗 更新时间:2023-10-29 15:46:44 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com