【问题标题】:How to parse Html by Agility into a string in C#?如何通过 Agility 将 Html 解析为 C# 中的字符串?
【发布时间】:2012-08-10 10:48:45
【问题描述】:

任何人都可以帮助将带有敏捷包的 Html 解析为单个字符串吗?

我正在尝试解析类似于以下格式的 Html,

<blockquote>\n
    <p>Here is the first collection:<\/p>\n 
        <ol>\n 
            <li>List1<\/li>\n 
            <li>List2<\/li>\n 
            <li>List3<\/li>\n 
        <\/ol>\n 
    <p>Here is the second collection:<\/p>\n 
        <ol>\n 
            <li>List1<\/li>\n 
            <li>List2<\/li>\n 
        <\/ol>\n 
<\/blockquote>

我尝试使用以下方法来获取“p”和“li”和“blockquote”。 但是,.Descendants 方法为“p”、“li”和“blockquote”创建了单独的集合,但我需要将单独的元素按顺序放置并将它们存储在单个字符串中。

 IEnumerable<HtmlNode> h3Tags = document.DocumentNode.Descendants("p"); foreach (var h3tag in h3Tags) {}

例如,我想要我的字符串存储, "这是第一个集合:List1 List2 List3 这是第二个集合 List1 List2"。

谢谢!

【问题讨论】:

    标签: c# html parsing html-agility-pack


    【解决方案1】:

    使用 blockquote 节点的 InnerText 属性。这应该以预期的顺序返回字符串。

    做一些类似的事情

    var blockQuoteNode = document.DocumentNode.Descendants("blockquote").First(); // or do a document.DocumentNode.SelectSingleNode(//put the exact xpath value of the blockquote element here...)
    var stringsYouNeed = blockQuoteNode.InnerText;
    

    【讨论】:

    • 对不起,我把问题说得更清楚了。如果我的块引用包含多个“p”和“li”怎么办?因为 .First() 只返回第一个节点。谢谢!
    • .First() 将返回整个第一个块引用节点对象,包括其所有子元素。这些子元素只是可能是 p 和 li 类型的其他节点。请记住,.First() 方法仅用于访问文档根节点中后代节点(在本例中为 blockquote)集合中的第一个节点。您可以指定哪个节点或指定特定的 xpath 值来选择您想要的 blockquote 节点。此外,如果您尝试一下,您会注意到 InnerText 属性返回节点及其子节点的所有内部文本属性值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2014-09-11
    • 1970-01-01
    • 2011-08-30
    • 2022-01-20
    • 2015-01-28
    • 2021-03-27
    相关资源
    最近更新 更多