Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按Xpath.C#HtmlAgilityPack拆分文本_C#_Xpath_Html Agility Pack - Fatal编程技术网

按Xpath.C#HtmlAgilityPack拆分文本

按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

我有一个带有InnerHtml的HtmlNode:

<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:')