使用类函数参数作为xpath的路径似乎不起作用?

时间:2012-08-30 18:59:39

标签: php xml xpath simplexml

这是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 ( )

为什么返回数组而不是值?

先谢谢。

2 个答案:

答案 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中的数组中映射。

尝试使用类似

的XPath
string(Route[1]/Table/Tablename)

使用XPath标准函数string()将节点集转换为单个字符串 - 这应该为您提供一个值。