【问题标题】:Extract text and ignore next node提取文本并忽略下一个节点
【发布时间】:2017-01-06 07:02:34
【问题描述】:

从这里:

<span class="postbody">
    <span style="color: #8e2fb6">
        <span style="font-weight: bold">nickname</span>
    </span>     
    <br>
    Example text 
    <br>
    Example text
    <br>    
    <p class="signature">THIS IS WHAT I DO NOT WANT</p>
</span>

我要提取:

<br>
Example text 
<br>
Example text
<br>   

我试过了:span/text()[1] 但它似乎不起作用。我总是得到不想要的p 类。有可能吗?

【问题讨论】:

    标签: xpath html-agility-pack


    【解决方案1】:

    首先,您需要将 Html 字符串加载到 HtmlDocument 或 HtmlNode 中(使用 .load() 函数)。

    ChildNodes 集合包含当前节点的每个子节点(基本上是 span.postbody 下的每个节点)。

    之后你需要做的事情就很明显了,只需抓住 #textbr 节点(请记住,你会收到一些 #text 只包含空白字符的节点。您可能希望在结果中将其过滤掉。

    //load html to HtmlNode
    node.ChildNodes.Where(n => n.Name.Equals("#text") || n.Name.Equals("br")) //It will return collection of HtmlNode
    

    【讨论】:

    • 添加一些解释将有助于使这个答案更好。
    • 谢谢。我想添加一些解释,但这很明显。无论如何,我会在我的编辑中稍微解释一下
    • 即使是“显而易见”的答案也可以从解释中受益。你的出现在低质量的帖子队列中,因为它只是一行代码,没有别的。编辑是一个很好的改进。
    【解决方案2】:

    您可以将 jQuery 选择器用于 postbody,然后使用 .text 方法来忽略 HTML。这也将忽略

    $('.postbody').text();

    另一种方法是遍历 $('.postbody').text(); 的子级;

    【讨论】:

      【解决方案3】:
      '//text()[preceding-sibling::br and normalize-space()]'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多