这是XML:
<Routes>
<Route type="source">
<Name>incoming</Name>
<Table><Tablename>incoming</Tablename></Table>
</Route>
<Route type="dest">
<Name>outgoing</Name>
</Route>
</Routes>
我的目标是尝试从Route / Table / Tablename输出“incoming”,但使用带有函数的类。
$doc = new SimpleXMLElement('routingConfig.xml', null, true);
class traverseXML
{
function getData($path = "Route", $type, $operation){
global $doc;
if($type == "table"){
$path = $path."[1]/Table/Tablename";
}
if($operation == "value"){
return $doc->xpath($path);
}
}
}
$traverseXML = new traverseXML;
我原以为这会返回一个值,但会返回一个数组:
echo $traverseXML->getData("Route", "table", "value");
//returns: Array
如果我改为:
print_r($traverseXML->getData("Route", "table", "value"));
//returns: Array ( )
为什么返回数组而不是值?
先谢谢。
答案 0 :(得分:1)
SimpleXMLElement::xpath()
返回一个数组,其中包含找到的项目(即使只有一个项目)。如果您不想要数组,请更改您的函数以查看从XPath查询返回的结果并返回您需要的任何内容。
例如,
if ($operation == "value") {
$results = $doc->xpath($path);
if (empty($results)) {
return NULL;
}
return (string) $results[0];
}
答案 1 :(得分:0)
因为XPath返回一个节点集 - 即与表达式匹配的所有节点的列表。在这种特定情况下,只有一个匹配节点,但因为XPath原则上返回一个列表,我假设它在PHP中的数组中映射。
尝试使用类似
的XPathstring(Route[1]/Table/Tablename)
使用XPath标准函数string()
将节点集转换为单个字符串 - 这应该为您提供一个值。