如何在XPath中注册PHP函数?

如何在XPath中注册PHP函数?,php,xml,xpath,xml-namespaces,Php,Xml,Xpath,Xml Namespaces,如何在XPATH中注册PHP函数?因为XPATH不允许我使用ends-with() 这是一个由一位成员给出的,但它不适用于 他使用的代码是: $xpath = new DOMXPath($document); $xpath->registerNamespace("php", "http://php.net/xpath"); $xpath->registerPHPFunctions("ends_with"); $nodes = $x->query("//tr[/td/a/img[

如何在
XPATH
中注册
PHP
函数?因为
XPATH
不允许我使用
ends-with()

这是一个由一位成员给出的,但它不适用于

他使用的代码是:

$xpath = new DOMXPath($document);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions("ends_with");
$nodes = $x->query("//tr[/td/a/img[php:function('ends-with',@id,'_imgProductImage')]"

function ends_with($node, $value){
    return substr($node[0]->nodeValue,-strlen($value))==$value;
}

我使用的是PHP 5.3.9。

在您的问题中,它看起来像一个打字错误,没有名为
的函数以
结尾,因此我希望它不会工作:

//tr[/td/a/img[php:function('ends-with',@id,'\u imgProductImage')]
^^^^^^^^^
而是使用正确的语法,例如正确的函数名:

//tr[/td/a/img[php:function('end_with',@id,''u imgProductImage')]
^^^^^^^^^
或者,例如,与以下示例类似:

book.xml:

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <title>PHP Basics</title>
  <author>Jim Smith</author>
  <author>Jane Smith</author>
 </book>
 <book>
  <title>PHP Secrets</title>
  <author>Jenny Smythe</author>
 </book>
 <book>
  <title>XML basics</title>
  <author>Joe Black</author>
 </book>
</books>

PHP基础知识
有关更多信息,这也是代码示例的来源

我希望这是有益的,让我知道,如果你仍然有一个关于这方面的问题

另见:

  • ;具体而言
  • ;具体而言

在您的问题中,它看起来像一个打字错误,没有名为
的函数以
结尾,因此我认为它不起作用:

//tr[/td/a/img[php:function('ends-with',@id,'\u imgProductImage')]
^^^^^^^^^
而是使用正确的语法,例如正确的函数名:

//tr[/td/a/img[php:function('end_with',@id,''u imgProductImage')]
^^^^^^^^^
或者,例如,与以下示例类似:

book.xml:

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <title>PHP Basics</title>
  <author>Jim Smith</author>
  <author>Jane Smith</author>
 </book>
 <book>
  <title>PHP Secrets</title>
  <author>Jenny Smythe</author>
 </book>
 <book>
  <title>XML basics</title>
  <author>Joe Black</author>
 </book>
</books>

PHP基础知识
更多信息,这也是代码示例的来源

我希望这是有益的,让我知道,如果你仍然有一个关于这方面的问题

另见:

  • ;具体而言
  • ;具体而言


结尾还是
结尾。函数名中有一个连字符。您的问题标题很容易引起误解。请在(错误)下留下评论回答。只要你有具体的问题,请从那里开始使用。如果你坚持要问这个问题,请在你的问题中创建一个自包含的工作示例代码。到目前为止,你发布的代码不能以当前的形式执行。你问的问题也在PHP手册中列出:-所以你可能应该这样做更清楚地说明你的具体编程问题是什么。或者仅仅是因为你在一个不可行的答案上绊倒了?如果是这样,就否决这个不可行的答案(或者纠正它)@gwillie,你是对的。但是一张答题海报已经创建了带有
的函数,所以它是
结尾的,只要把xpath中的
'end-with'
改成
'end-with'
,你应该会没事的。我想这就是@gwillie想说的。至少我想说,这是人们应该尝试的第一件事,就像它看起来的那样e最容易解决的问题。它是
结尾还是
结尾。函数名中有一个连字符。您的问题标题很容易引起误解。请在(错误的)下面留下评论回答。只要你有具体的问题,请从那里开始使用。如果你坚持要问这个问题,请在你的问题中创建一个自包含的工作示例代码。到目前为止,你发布的代码不能以当前的形式执行。你问的问题也在PHP手册中列出:-所以你可能应该这样做更清楚地说明你的具体编程问题是什么。或者仅仅是因为你在一个不可行的答案上绊倒了?如果是这样,就否决这个不可行的答案(或者纠正它)@gwillie,你是对的。但是一张答题海报已经创建了带有
的函数,所以它是
结尾的,只要把xpath中的
'end-with'
改成
'end-with'
,你应该会没事的。我想这就是@gwillie想说的。至少我想说,这是人们应该尝试的第一件事,就像它看起来的那样e解决这个问题很容易。我很欣赏你的深度回答:)你回答了它。在列表中有函数名
以(string1,string2)
结尾,你在这里混合了两种语言:XPath(在版本2.0中是
结尾)和PHP(在你的代码示例中是
结尾)。因此,最好不要只是复制代码,然后想知道为什么它不起作用:您需要首先了解它的作用。是的,Xpath 2.0中有以
结尾的
,但不是W3学校,而是这里的授权文件:-当涉及多个语言时,请小心,您知道您使用的是哪一个语言,我使用的是什么是的。你是对的。我曾经尝试过在XPath中使用
结尾。但是它在2.0版中得到了支持。我同意。但是我看到的一个例子用XPath注册了PHP函数,就像你也用XPath注册了PHP函数一样。所以它不起作用,这就是我为什么问的原因。请不要介意我的回答粗鲁,只是让我回答ting你知道亲爱的朋友:)是的,这里没有问题,一点也不粗鲁。只是希望你能理解这一点,当事情搞砸时,它可能会变得有点复杂。我很欣赏你的深度回答:)你回答了。函数名
以(string1,string2)结尾
在列表中,您在这里混合了两种语言:XPath(在版本2.0中以
结尾)和PHP(在代码示例中以
结尾)。因此,最好不要只是复制代码,然后想知道为什么它不起作用:您需要首先了解它的作用。是的,Xpath 2.0中有以
结尾的
,但不是W3学校,而是这里的授权文件:-当涉及多个语言时,请小心,您知道您使用的是哪一个语言,我使用的是什么是的,你说得对。我试过在XPa中使用
结尾