0

SimpleXML の -> の後に XML パスを取る次の PHP 関数があります。

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 の 1 行が関数を返し、それらが同じコードに解決されるべきであると考えない理由を誰でも理解できますか?

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'];

もう1つの解決策は、Pekkaがxpathクエリを提案するようなものです。

于 2013-01-27T14:54:00.050 に答える