我有以下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行会返回一个函数而不考虑它们应该解析为相同的代码?
答案 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查询它。