【问题标题】:Pull XML nodeValue into php Variable将 XML nodeValue 拉入 php 变量
【发布时间】:2012-07-13 10:38:17
【问题描述】:

我正在尝试将此 XML 代码中的 <all> / <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;

【问题讨论】:

    标签: php xml xpath nodevalue


    【解决方案1】:

    请参考文档here$xml-&gt;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
    

    我想这正是你需要的。

    【讨论】:

      【解决方案2】:

      xpath 返回一个 SimpleXMLElement 对象数组......所以你可以这样做:

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

      Working example here

      或者如果您使用的是 PHP => 5.4,您可以这样做:

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

      Working example here

      【讨论】:

      • Manse,效果很好,谢谢!有没有办法在一行中将 [0] 分配给 $unit_value ?也许像下面这样的东西? $unit_value = $xml->xpath("//stats//type[@id='a']//buy//avg")[0];
      • @user1452060 仅从 PHP 5.4 开始 -> php.net/manual/en/language.types.array.php#example-87 - 我已经用一个例子更新了我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多