0

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

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 行会返回一个函数并且不考虑它们应该解析为相同的代码?

4

2 回答 2

1

这不是它的工作原理:您必须运行eval()以将字符串“batch->attributes()->quantity”转换为您可以使用的东西。这充其量是一种令人讨厌的方法。

如果您使用XPath并将 XPath 字符串传递给函数会更优雅。查看文档,字符串应如下所示:

/recipe/batch@quantity
于 2013-01-26T12:39:01.407 回答
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 查询它。

于 2013-01-27T14:54:00.050 回答