Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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
Php 如何在带有RegisterHPFunctions的XSLT中使用DOMDocumentFragment?_Php_Dom_Xslt - Fatal编程技术网

Php 如何在带有RegisterHPFunctions的XSLT中使用DOMDocumentFragment?

Php 如何在带有RegisterHPFunctions的XSLT中使用DOMDocumentFragment?,php,dom,xslt,Php,Dom,Xslt,请参阅“它工作”和“它不工作”部分:是我的代码的错误还是DOMDocument PHP实现的错误? 如果您不熟悉XSLT和RegisterHPFunctions,请参阅。假设通过字符串输入 函数XSL\u transf($xml,$XSL){ $xmldoc=DOMDocument::loadXML($xml); $xsldoc=DOMDocument::loadXML($xsl); $proc=new XSLTProcessor(); $proc->RegisterHPFunctions()

请参阅“它工作”和“它不工作”部分:是我的代码的错误还是DOMDocument PHP实现的错误?


如果您不熟悉XSLT和RegisterHPFunctions,请参阅。假设通过字符串输入

函数XSL\u transf($xml,$XSL){
$xmldoc=DOMDocument::loadXML($xml);
$xsldoc=DOMDocument::loadXML($xsl);
$proc=new XSLTProcessor();
$proc->RegisterHPFunctions();//此处
$proc->importStyleSheet($xsldoc);
echo$proc->transformToXML($xmldoc);
}
$xml=''//简单的

$xsl=我不知道是否有关于通过registerHPFunctions()调用的函数可以返回哪些数据的文档。如果有疑问,您必须检查libxml2/libxslt()的源代码

第二个示例不起作用的原因可能是它不包含有效的xml,因为它只有一个根元素。末尾的单词“test”是与前面的元素处于同一级别的文本节点。测试以剪切文本节点或环绕根节点。DocumentFragment包含多个元素,但似乎没有正确返回

如果第二个示例不是这样工作的,则可能根本不支持返回DocumentFragments


@Peter Krauss:对于空节点集,不发送错误消息是xml的常见行为。我自己使用libxslt函数,但只发送纯文本。当我尝试发送数组时,失败了。也许对您来说,这是一种仅使用文本并在xslt端将其转换为节点集的方法?

您可以使用以下XPath表达式来解决:

php:function('foo1')/node()
现在,它是一个PHP错误吗?还是一个libxml2错误?这很难说,因为如果查看文档,就找不到对文档片段的任何引用。最相似的是,它也是用于表示文档的节点

我认为问题来自PHP。它不应该返回整个文档片段节点,而是返回由其内容组成的节点集


然而,我可能完全错了,因为我从未使用过libxml2,我也不知道它是如何工作的。

我去了链接并试图通读,但它的措辞似乎非常糟糕。我希望这里的其他人能给你一个关于itOk的提示,我编辑过,也许现在的解释更好。关于文档:我正在寻找,但我没有看到。如果你指向链接,我们将看到。关于第二个例子:不,我需要片段来做这件事(否则会有一个解决方案),如果您使用“格式良好的根”进行测试,结果将是相同的。关于“不支持”是可能的,但是“没有错误消息”产生了我的希望。是的,
/node
是一个很好的解决方法!!我正在测试另一个东西,但它似乎是解决方案!谢谢,我正在使用你的解决方案。
<xsl:template match="/">
   PHP foo1()=<xsl:copy-of select="php:function('foo1')" />
</xsl:template>
 <t> foo <tt val="123"/> bar </t>
function foo1() {
    $dom = new DOMDocument;
    $tmp = $dom->createDocumentFragment();
    $tmp->appendXML('<t> foo <tt val="123"/> bar </t> test'); 
    return $tmp;
}
php:function('foo1')/node()