Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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 使用类函数参数作为xpath的路径不会';看来不行吗?_Php_Xml_Xpath_Simplexml - Fatal编程技术网

Php 使用类函数参数作为xpath的路径不会';看来不行吗?

Php 使用类函数参数作为xpath的路径不会';看来不行吗?,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,以下是XML: <Routes> <Route type="source"> <Name>incoming</Name> <Table><Tablename>incoming</Tablename></Table> </Route> <Route type="dest"> <Name>outgoing&

以下是XML:

<Routes>
    <Route type="source">
        <Name>incoming</Name>
    <Table><Tablename>incoming</Tablename></Table>
    </Route>
    <Route type="dest">
        <Name>outgoing</Name>
    </Route>
</Routes>
我本以为它会返回一个值,但它会返回一个数组:

echo $traverseXML->getData("Route", "table", "value");  
//returns: Array
如果我这样做:

print_r($traverseXML->getData("Route", "table", "value"));
//returns: Array ( )
为什么它返回的是数组而不是值


感谢高级版。

因为XPath返回一个节点集,即与表达式匹配的所有节点的列表。在这个特定的例子中,只有一个匹配的节点,但由于XPath原则上返回一个列表,所以我假设它映射到PHP中的数组中

尝试使用类似XPath的

string(Route[1]/Table/Tablename)
它使用XPath标准函数
string()
将节点集转换为单个字符串-这将为您提供一个值。

返回一个数组,其中包含找到的项(即使只有一个)。如果不需要数组,请修改函数以查看XPath查询返回的结果,并返回所需的任何结果

比如说,

    if ($operation == "value") {
        $results = $doc->xpath($path);

        if (empty($results)) {
            return NULL;
        }

        return (string) $results[0];
    }

你能详细说明一下吗
string()
不是函数吗?我试着按照这里显示的大纲:,他们只是使用echo
$parent->child
来获取值。我对答案进行了一些扩展,但没有太多要添加的内容。我没有PHP方面的具体经验,但我肯定希望XPath会有一个数组或其他形式的枚举……阅读您链接的页面:“您当然可以使用任何有效的XPath查询。该方法将始终返回一个数组“”。它们确实使用了
$echo…
,但是在数组上的
foreach
循环中。
$parent->child
示例没有使用XPath,而是直接在DOM中导航。感谢您的帮助解释。
[0]
应该是
[1]
(位置是基于1的,而不是基于0的)。另外,您的XML被破坏了,因为它应该以
结尾。感谢您指出这一点-它实际上仍然做同样的事情。它不会为我返回空数组。
    if ($operation == "value") {
        $results = $doc->xpath($path);

        if (empty($results)) {
            return NULL;
        }

        return (string) $results[0];
    }