0

这是 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 输出“传入”,但使用具有函数的类。

$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 ( )

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

先谢谢了。

4

2 回答 2

1

SimpleXMLElement::xpath()返回一个数组,其中包含找到的项目(即使只有一个)。如果您不需要数组,请更改您的函数以查看从 XPath 查询返回的结果并返回您需要的任何内容。

例如,

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

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

        return (string) $results[0];
    }
于 2012-08-30T19:19:50.027 回答
0

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

尝试使用 XPath

string(Route[1]/Table/Tablename)

它使用 XPath 标准函数string()将节点集转换为单个字符串——这应该给你一个值。

于 2012-08-30T19:04:44.240 回答