将 XML nodeValue 拉入 php 变量
Posted
技术标签:
【中文标题】将 XML nodeValue 拉入 php 变量【英文标题】:Pull XML nodeValue into php Variable 【发布时间】: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;
【问题讨论】:
【参考方案1】:请参考文档here,$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
我想这正是你需要的。
【讨论】:
【参考方案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 - 我已经用一个例子更新了我的答案以上是关于将 XML nodeValue 拉入 php 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中使用 xhtml:link 解析 XML?
PHP xpath 问题->item(0)->nodeValue