Php 使用类函数参数作为xpath的路径不会';看来不行吗?
以下是XML: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&
<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];
}