0

<all>このXMLコードの/値を変数に割り当てて<avg>、計算に使用できるようにしようとしています。しかし、これを実行して値を印刷しようとすると、空白の画面が表示されます。誰か助けてもらえますか?

<stats>
    <type id="a">
        <buy>
            <volume>698299009</volume>
            <avg>17.94</avg>
            <max>18.45</max>
            <min>1.00</min>     
        </buy>
        <sell>
            <volume>16375234</volume>
            <avg>21.03</avg>
            <max>24.99</max>
            <min>20.78</min>        
        </sell>
        <all>
            <volume>714674243</volume>
            <avg>18.01</avg>
            <max>24.99</max>
            <min>1.00</min>     
        </all>
    </type>
</stats>

私が使用しているphpコードは次のとおりです。

$xml = simplexml_load_file("values.xml");

$unit_value = $xml->xpath("/stats/type[@id='a']/buy/avg/")->nodeValue;

echo $unit_value;
4

2 に答える 2

2

こちらのドキュメントを参照してください$xml->xpath。配列が返されます。ドキュメントには、テキストノードにアクセスする方法の例も示されています。以下はドキュメントからの抜粋です

<?php
  $string = <<<XML
   <a>
     <b>
       <c>text</c>
       <c>stuff</c>
     </b>
     <d>
       <c>code</c>
     </d>
  </a>
 XML;

 $xml = new SimpleXMLElement($string);

 /* Search for <a><b><c> */
 $result = $xml->xpath('/a/b/c');

 while(list( , $node) = each($result)) {
   echo '/a/b/c: ',$node,"\n";
 }

 /* Relative paths also work... */
 $result = $xml->xpath('b/c');

 while(list( , $node) = each($result)) {
   echo 'b/c: ',$node,"\n";
 }
?>

これは次のように出力を生成します

/a/b/c: text
/a/b/c: stuff
b/c: text
b/c: stuff

それはまさにあなたが必要としているものだと思います。

于 2012-07-13T15:02:46.953 に答える
1

xpathはSimpleXMLElementオブジェクトの配列を返すので、これを行うことができます:

$unit_value = $xml->xpath("//stats//type[@id='a']//buy//avg");
echo (string)$unit_value[0]; // cast to string not required

ここでの実例

または、PHP => 5.4を使用している場合は、次のように実行できます。

$unit_value = $xml->xpath("//stats//type[@id='a']//buy//avg")[0];
echo $unit_value; 

ここでの実例

于 2012-07-13T15:16:53.300 に答える