将XML路径传递给函数不会返回值

时间:2013-01-26 08:40:07

标签: php xml simplexml

我有以下PHP函数,它在 - >之后采用XML路径。对于我的SimpleXML。

function parseRecipeData($xmlPath) {
    global $db_recipe_type;
    global $db_recipe_filename;
    global $xml;

    $xml = simplexml_load_file($db_recipe_filename);
    // var_dump($xml);

    // Get data from XML Field
    $requestedInfo = $xml->$xmlPath;
    //var_dump($requestedInfo);

    return $requestedInfo;
}

我的问题是PHP第1行什么都不返回,而PHP第2行则返回XML值。请注意,$recipeSize = "batch->attributes()->quantity";是在我的应用程序的顶部定义的,应该是全局范围。我的XML树低于此代码的其余部分。

1:<?php echo parseRecipeData($recipeSize); ?>

2:<?php echo $xml->batch->attributes()->quantity; ?>

XML结构

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE recipe>
<recipe>
  <batch quantity="2.13 gal"/>
</recipe>

任何人都可以看到为什么一个PHP行会返回一个函数而不考虑它们应该解析为相同的代码?

2 个答案:

答案 0 :(得分:1)

这不是它的工作原理:您必须运行eval()将字符串“batch-&gt; attributes() - &gt; quantity”转换为您可以使用的内容。这充其量只是一种不稳定的做法。

如果你愿意的话会更优雅。使用XPath并将函数传递给XPath字符串。查看文档,字符串看起来应该是这样的:

/recipe/batch@quantity

答案 1 :(得分:0)

您可以创建另一个功能:

function getRecipeData() {
    global $db_recipe_type;
    global $db_recipe_filename;
    global $xml;

    $xml = simplexml_load_file($db_recipe_filename);

    return $xml;
}

用法:

getRecipeData()->batch['quantity'];

另一个解决方案就像Pekka建议xpath查询它。