代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

我们可以使用InnerText提取到第一个内部<br/>(如果存在)的文本吗?

  •  0
  • Andrew Truckle  · 技术社区  · 4 年前

    以这个HTML(为清楚起见,多行)为例:

    <li style="list-style-image: url('lib/10.bmp')" class="rvps2">
        <span class="rvts15">Internal: Updated </span>
        <span class="rvts16">Google Calendar Interface</span>
        <span class="rvts15">Nuget Packages:</span>
        <br/>
        <span class="rvts15"></span>
        <br/>
        <span class="rvts15">Google.Apis.1.49.0 -&gt; Google.Apis.1.50.0</span>
        <br/>
        <span class="rvts15">Google.Apis.Auth.1.49.0 -&gt; Google.Apis.Auth.1.50.0</span>
        <br/>
        <span class="rvts15">Google.Apis.Calendar.v3.1.49.0.2187 -&gt; Google.Apis.Calendar.v3.1.50.0.2237</span>
        <br/>
        <span class="rvts15">Google.Apis.Core.1.49.0 -&gt; Google.Apis.Core.1.50.0</span>
        <br/>
        <span class="rvts15">NLog.4.7.6 -&gt; NLog.4.7.8</span>
        <br/>
        <span class="rvts15">NLog.Config.4.7.6 -&gt; NLog.Config.4.7.8</span>
        <br/>
        <span class="rvts15">NLog.Schema.4.7.6 -&gt; NLog.Schema.4.7.8</span>
    </li>
    

    我无法更改HTML的结构。使用HTML敏捷包,我目前有以下代码 li 项目:

    writer.WriteString(listitem.InnerText.Trim());
    

    问题是 InnerText 归还一切,我不想这样。

    • 如果 项目具有 <br/> 那么我只想包括第一行文本。在这种情况下:

    内部:更新谷歌日历界面Nuget包:

    • 对于其他 没有任何项目 <br/> 那么,使用这些元素是可以的 标记模板 .

    我们能否将文本提取为字符串,直到第一个字符串 <br/> (如果存在)?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Andrew Truckle    4 年前

    我想这很简单。枚举 ChildNodes 属于 li ,把他们 InnerText ,用单个空格作为分隔符连接字符串,先停止 br .

    也许你在问是否有现成的函数,所以这可以在没有这个特殊代码的情况下完成,但我想没有。


    示例代码:

    string itemtext = string.Empty;
    foreach(HtmlNode item in listitem.ChildNodes)
    {
        // We are only interested in "span" elements
        if(item.Name == "span")
        {
            itemtext += item.InnerText.Trim();
            itemtext += " ";
        }
    
        // Stop at the first "br" element.
        if (item.Name == "br")
            break;
    }
    
    writer.WriteString(itemtext.Trim().Replace(" .", "."));