我们可以使用 InnerText 将文本提取到第一个内部 <br/>(如果存在)吗?
Can we extract text up to the first inner <br/> (if it exists) using InnerText?
取这个 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 -> Google.Apis.1.50.0</span>
<br/>
<span class="rvts15">Google.Apis.Auth.1.49.0 -> Google.Apis.Auth.1.50.0</span>
<br/>
<span class="rvts15">Google.Apis.Calendar.v3.1.49.0.2187 -> Google.Apis.Calendar.v3.1.50.0.2237</span>
<br/>
<span class="rvts15">Google.Apis.Core.1.49.0 -> Google.Apis.Core.1.50.0</span>
<br/>
<span class="rvts15">NLog.4.7.6 -> NLog.4.7.8</span>
<br/>
<span class="rvts15">NLog.Config.4.7.6 -> NLog.Config.4.7.8</span>
<br/>
<span class="rvts15">NLog.Schema.4.7.6 -> NLog.Schema.4.7.8</span>
</li>
我无法更改 HTML 的结构。使用 HTML Agility Pack 我目前有 li
项目的代码:
writer.WriteString(listitem.InnerText.Trim());
问题是 InnerText
returns 一切,我不想要那个。
- 如果
li
项有 <br/>
个元素,那么我只想包含第一行文本。在这种情况下:
Internal: Update Google Calendar Interface Nuget Packages:
- 对于没有任何
<br/>
元素的其他 li
项,则可以使用 InnerText
.
我们可以将文本提取为字符串直到第一个 <br/>
(如果存在)吗?
我想这很简单。枚举li
的ChildNodes
,取他们的InnerText
,用一个space作为分隔符拼接字符串,先停在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(" .", "."));
取这个 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 -> Google.Apis.1.50.0</span>
<br/>
<span class="rvts15">Google.Apis.Auth.1.49.0 -> Google.Apis.Auth.1.50.0</span>
<br/>
<span class="rvts15">Google.Apis.Calendar.v3.1.49.0.2187 -> Google.Apis.Calendar.v3.1.50.0.2237</span>
<br/>
<span class="rvts15">Google.Apis.Core.1.49.0 -> Google.Apis.Core.1.50.0</span>
<br/>
<span class="rvts15">NLog.4.7.6 -> NLog.4.7.8</span>
<br/>
<span class="rvts15">NLog.Config.4.7.6 -> NLog.Config.4.7.8</span>
<br/>
<span class="rvts15">NLog.Schema.4.7.6 -> NLog.Schema.4.7.8</span>
</li>
我无法更改 HTML 的结构。使用 HTML Agility Pack 我目前有 li
项目的代码:
writer.WriteString(listitem.InnerText.Trim());
问题是 InnerText
returns 一切,我不想要那个。
- 如果
li
项有<br/>
个元素,那么我只想包含第一行文本。在这种情况下:
Internal: Update Google Calendar Interface Nuget Packages:
- 对于没有任何
<br/>
元素的其他li
项,则可以使用InnerText
.
我们可以将文本提取为字符串直到第一个 <br/>
(如果存在)吗?
我想这很简单。枚举li
的ChildNodes
,取他们的InnerText
,用一个space作为分隔符拼接字符串,先停在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(" .", "."));