按Xpath.C#HtmlAgilityPack拆分文本
我有一个带有InnerHtml的HtmlNode:按Xpath.C#HtmlAgilityPack拆分文本,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,我有一个带有InnerHtml的HtmlNode: <a>SomeText</a> DividerText: <br> TextToSelect1 <br/> TextToSelect2 <br/> TextToSelect3 <br> TextToSelect4 SomeText DividerText: TextToSelect1 文本选择2 文本选择3 文本选择4 可以仅通过XPath选择所有“TextTo
<a>SomeText</a>
DividerText:
<br>
TextToSelect1
<br/>
TextToSelect2
<br/>
TextToSelect3
<br>
TextToSelect4
SomeText
DividerText:
TextToSelect1
文本选择2
文本选择3
文本选择4
可以仅通过XPath选择所有“TextToSelect”,而不使用c#Split或Regex
如下所示:/text()/substring after('DividerText:')
或者如何获得不包含标记a的InnerHtml 您可以在DividerText之后获得BR后面的所有文本,如下所示(在示例控制台应用程序中): 将转储此文件:
TextToSelect1
TextToSelect2
TextToSelect3
TextToSelect4
XPATH表达式首先递归获取包含特定“DividerText:”标记的text()节点,然后获取以下所有同级BR元素,然后获取以下所有同级文本元素。要选择文档中以下所有文本节点:
//text()[contains(., 'DividerText:')]//following::text()
要选择换行元素内同一级别上的所有同级文本节点(如下所示):
//text()[contains(., 'DividerText:')]//following-sibling::text()
如果直接在后面需要一些文本,则需要XPath 2.0,此查询还返回除法器字符串后面的部分,但需要XPath 1.0中不可用的
子字符串后面的函数:
//text()[contains(., 'DividerText:')]//(substring-after(., 'DividerText:'), following::text()/data())
如果您能够使用XPath 2.0或更新版本,则在
方法之后实际上有一个子字符串:
substring-after(string-join(//text()), 'DividerText:')
您还可以使用//text()
获取所有文本节点,然后使用一些子字符串-after()
等效于C#,您可能必须连接生成的集合/数组。@tnw:Erm,他特别指出,没有C#拆分或Regex@tnw他说没有Regex,区别是什么?事实上他们都是以TextToSelect开头的吗?还是他们都在追求DividerText后面的BR,等等?@SimonMourier他们都在追求后面的BRDividerText。但也许我可以简单地删除节点,然后将“DividerText”替换为空字符串。如何获取排除标记的InnerHtml?不可能使用正则表达式返回已删除元素的子树。但也可以返回子树中不在
标记内的所有文本节点。
substring-after(string-join(//text()), 'DividerText:')