PHP - 有没有办法使用xml属性并将其转换为php变量?

时间:2014-08-20 09:27:16

标签: php xml xpath

我有一个以这种方式制作的XML:

<marketstat>
 <type id="17889">
  <buy>
   <volume>15005046</volume>
   <avg>704.84</avg>
   <max>755.88</max>
   <min>428.10</min>
   <stddev>58.87</stddev>
   <median>753.77</median>
   <percentile>755.87</percentile>
  </buy>
  <sell>
   <volume>43601243</volume>
   <avg>1017.32</avg>
   <max>1697.90</max>
   <min>917.94</min>
   <stddev>190.56</stddev>
   <median>953.01</median>
   <percentile>917.94</percentile>
  </sell>
 </type>
 <type id="44">
  <buy>
   <volume>15005046</volume>
   <avg>704.84</avg>
   <max>755.88</max>
   <min>428.10</min>
   <stddev>58.87</stddev>
   <median>753.77</median>
   <percentile>755.87</percentile>
  </buy>
  <sell>
   <volume>43601243</volume>
   <avg>1017.32</avg>
   <max>1697.90</max>
   <min>17.9</min>
   <stddev>190.56</stddev>
   <median>953.01</median>
   <percentile>917.94</percentile>
  </sell>
 </type>
</marketstat>

有没有办法可以在标签类型中使用属性id并将其转换为具有相同名称的php变量,并在xml内部赋值?

我的目标是为每个id设置一个变量,并在xml中分配sell-&gt; min的值,以便在我可以调用它进行一些计算之后。

类似的东西:

$17889 = "917.94";
$44 = "17.9";

或我唯一能做的就是使用$ xml-&gt; xpath(&#39; // marketstat / type [@id =&#34; 17889&#34;] / sell / min&#39;) ;每次我想得到它的价值?

2 个答案:

答案 0 :(得分:0)

是和否。这是可能的,但是不可能有一个像17889和#17889这样的变量。因为变量名必须以字母或下划线开头。 http://php.net/manual/en/language.variables.basics.php

现在,如果您需要$_17889 = "917.94";$_44 = "17.9";之类的内容,那么在ID前面加上下划线,就可以执行以下操作:

$result = $xml->xpath('//marketstat/type');
while(list( , $node) = each($result)) {
    $attr = $node->attributes();
    $id = "_" . $attr['id'];
    $$id = $node->sell[0]->min[0];
}

答案 1 :(得分:0)

感谢你的建议nl-x我已经能够解决这个问题。

我刚刚&#34;黑客攻击&#34;你的代码在我感觉更舒适的东西,一个正常的foreach循环循环

foreach ($xml->marketstat->type as $type)
        {
        $typeid = $type[id];
        $id = "_" . $typeid;
        $$id = $type->sell->min;
        }

再次感谢你。