html - 为什么我的 HTML 文档在使用 FSharp.Data HTML 解析器时会被打乱?
问题描述
当尝试使用 FSharp.Data 库操作一些 HTML 时,我得到了令人困惑的结果。
这是代码:
let manipulateHtml (htmlDoc:HtmlDocument) =
htmlDoc.Html().Descendants()
|> filterFromHtml stuffToRemove
|> HtmlDocument.New
当我打印生成的 Html 文档时,它的顺序不正确 - 它似乎从随机节点开始重建文档。HtmlDocument.New(seq) 如何重建 html 文档,有没有办法以正确的格式重建文档 - 例如它的原始顺序?
解决方案
那是因为该Descendants()
方法以递归方式返回所有子项。这意味着返回的序列将包含所有的祖父母、父母、孩子……节点。
例如,当文档是:
<html>
<tag1>
<tag2>
this is the text
</tag2>
</tag1>
</html>
然后Descendants()
将返回一系列节点,如下所示:
<tag1>
<tag2>
this is the text
</tag2>
</tag1>
<tag2>
this is the text
</tag2>
this is the text
但是该HtmlDocument.New
方法以扁平方式构造文档,因此您将得到一个像上面那样tag2
重复两次,this is the text
重复3次的文档。
因此,为了解决您的问题,您需要遍历 的树htmlDoc.Html()
,确定保留哪个节点,同时使用HtmlNode.New***()
andHtmlDocument.New***()
方法构造一棵新树。
推荐阅读
- linux - How can I use a file from a remote repository into my Terraform file?
- c# - AJAX call in a view page in .NET Core not formatted properly for data display
- linux - How do I move a line of text in a file to the top if it contains a word (need for multiple files)
- django - Django Jquery Ajax Like 部分不起作用
- python - 我在 Pandas 读取 CSV 后显示空白的列(表示北美)中有“NA”
- python - Django:如何创建一个抽象字段?
- java - 在springboot jpa存储库中调用存储过程时出现错误PLS-00221不是过程或未定义
- swift - 以编程方式翻译语言
- amazon-web-services - 在 Spinnaker 管道中运行脚本或命令
- html - 我的希腊网站的文本以俄语显示