C# re:test()XPath到HtmlAgilityPack(使用匹配的regex internal获取所有p标记)

C# re:test()XPath到HtmlAgilityPack(使用匹配的regex internal获取所有p标记),c#,html,xpath,html-agility-pack,C#,Html,Xpath,Html Agility Pack,我想要所有的标签。正则表达式独立工作,没有标记 这是我的XPath:“//p[re:test(,'^=.+=$,'i')” 但当我把它插入到 HtmlNodeCollection pNodes = htmlDoc.DocumentNode.SelectNodes("//p[re:test(.,'^=.+=$', 'i')]"); 例外情况是: 命名空间管理器或XsltContext 需要。此查询具有前缀, 变量,或用户定义的函数 编辑:Html由FCKEditor生成,没有定义名称空间。我需要

我想要所有的标签。正则表达式独立工作,没有
标记

这是我的XPath:
“//p[re:test(,'^=.+=$,'i')”

但当我把它插入到

HtmlNodeCollection pNodes = htmlDoc.DocumentNode.SelectNodes("//p[re:test(.,'^=.+=$', 'i')]");
例外情况是:

命名空间管理器或XsltContext 需要。此查询具有前缀, 变量,或用户定义的函数

编辑:Html由FCKEditor生成,没有定义名称空间。我需要设置一些东西使其工作吗

HTML:

<p><style type="text/css">
h2 a { color: black; }</style></p>
<p>----</p>
<h2>test <a href="http://searisen.com">link</a></h2>
<p>== Heading 2 ==</p>
<p>----</p>
<p>=== Heading [http://searisen.com SeaRisen.com] ===</p>

h2a{颜色:黑色;}

----

试验 ==标题2==

----

==航向[http://searisen.com [SeaRisen.com]===


显然,HtmlAgilityPack不处理名称空间(我没有名称空间)。所以我想出了这个方法

var pNodes = htmlDoc.DocumentNode.SelectNodes("//p")
    .Where(node => Regex.Match(node.InnerText, "^=.+=$").Success);

如果有HtmlAgilityPack解决方案,我很乐意听到

显然,HtmlAgilityPack不处理名称空间(我没有名称空间)。所以我想出了这个方法

var pNodes = htmlDoc.DocumentNode.SelectNodes("//p")
    .Where(node => Regex.Match(node.InnerText, "^=.+=$").Success);

如果有HtmlAgilityPack解决方案,我很乐意听到

出现错误的原因是表达式
re:test
使用了名为
test
的XPATH函数(在前缀为
re
的命名空间中声明),XSLT上下文不知道该函数

我不知道这个表达式是从哪里来的,但它不是标准的,所以在Html敏捷包上下文中没有任何意义:-)

要获得更深入的解释,请参阅下面这篇很酷的文章:。请注意,您可以使用这些技术使其工作

也就是说,这里是一个“纯”Html敏捷包/XPATH实现:

var pNodes = htmlDoc.DocumentNode.SelectNodes("//p[text()='=.+=']");

它使用一个过滤器(介于[和]之间)和标准XPATH函数text(),这意味着“内部文本”。

出现的错误是因为表达式
re:test
使用了一个名为
test
的XPATH函数(在前缀为
re
的命名空间中声明),XSLT上下文不知道该函数

我不知道这个表达式是从哪里来的,但它不是标准的,所以在Html敏捷包上下文中没有任何意义:-)

要获得更深入的解释,请参阅下面这篇很酷的文章:。请注意,您可以使用这些技术使其工作

也就是说,这里是一个“纯”Html敏捷包/XPATH实现:

var pNodes = htmlDoc.DocumentNode.SelectNodes("//p[text()='=.+=']");

它使用一个过滤器(介于[和]之间)和标准XPATH函数text(),表示“内部文本”。

为了回应Simon Mourier所说的,re:test()函数不是核心XPATH函数。它在Calibre的XPath函数集()中可用,但这是一个非标准扩展。除了Calibre之外,我不知道还有其他系统会公开re:test()函数


有关核心XPath函数和XSLT扩展函数的详细摘要,请参见

以回应Simon Mourier所说的,re:test()函数不是核心XPath函数。它在Calibre的XPath函数集()中可用,但这是一个非标准扩展。除了Calibre之外,我不知道还有其他系统会公开re:test()函数


有关核心XPath函数和XSLT扩展函数的详细摘要,请参见

谢谢Simon!谷歌到处搜索没有帮助。谢谢你,西蒙!谷歌到处转悠也无济于事。