2013-07-02 129 views
0

我使用PHP的echo来输出XML,从php文件(它连接到我的数据库)提取数据。现在我想用数据填充数组,并且找不到方法。我搜索并找到与JSON,AJAX,XMLHttpRequest的例子,但没有任何作品。将MySQL PHP - XML转换为JS Array

基本上我需要转换这样的:

// XML从PHP文件

<markers> 
<marker name="Bikes" desc="116 18" lat="4.698479" lon="-74.048111" tipo="Store"/> 
<marker name="Kooning" desc="116 16" lat="4.697316" lon="-74.044807" tipo="Store"/> 
<marker name="Bike House" desc="15 104" lat="4.692983" lon="-74.044952" tipo="Store"/> 
</markers 

解析成这样:

// JS

var Store = [ 
      ['Bikes', 4.698479, -74.048111, '116 18'], 
      ['Kooning', 4.697316, -74.044807, '116 16'], 
      ['Bike House', 4.692983, -74.044952, '15 104'], 
      ]; 

非常感谢你许多。我希望有人能帮助我。

+0

这一个可能是最好的解决http://chat.stackoverflow.com/rooms/11/php –

回答

1

如果您需要将XML转换为JS Array的JavaScript唯一方法,则可能需要查看JXON。 Here是一个非常好的文章,有几个算法可以做你想做的事情。

我的答案要求您有simpleXML可用于您的PHP安装。还要注意,由于xml结构,我的答案将desc属性放在JS数组中,并在数组中包含tipo属性。如果您需要按照您描述的确切顺序和值的数组,则需要按照您的任意顺序访问属性。

<?php 

$xml = <<<xml 
<markers> 
<marker name="Bikes" desc="116 18" lat="4.698479" lon="-74.048111" tipo="Store"/> 
<marker name="Kooning" desc="116 16" lat="4.697316" lon="-74.044807" tipo="Store"/> 
<marker name="Bike House" desc="15 104" lat="4.692983" lon="-74.044952" tipo="Store"/> 
</markers> 
xml; 

$markers = new SimpleXMLElement($xml); 

foreach ($markers->marker as $marker) { 
    $mark_arr = array(); 
    foreach ($marker->attributes() as $attr) { 
      $mark_arr[] = (string) $attr; 
    } 
    $marks_arr[] = $mark_arr; 
} 

echo '<script>var Store = '.json_encode($marks_arr).';</script>'; 

?> 

一个潜在更有用的答案是将其导出到JS对象,以便您可以通过键访问这些值。这是答案:

<?php 

$xml = <<<xml 
<markers> 
<marker name="Bikes" desc="116 18" lat="4.698479" lon="-74.048111" tipo="Store"/> 
<marker name="Kooning" desc="116 16" lat="4.697316" lon="-74.044807" tipo="Store"/> 
<marker name="Bike House" desc="15 104" lat="4.692983" lon="-74.044952" tipo="Store"/> 
</markers> 
xml; 

$markers = new SimpleXMLElement($xml); 

foreach ($markers->marker as $marker) { 
    $mark_arr = array(); 
    foreach ($marker->attributes() as $key => $attr) { 
      $mark_arr[$key] = (string) $attr; 
    } 
    $marks_arr[] = $mark_arr; 
} 

echo '<script>var Store = '.json_encode($marks_arr).';</script>'; 
+0

丹尼尔非常感谢你。问题是它必须在JS文件中完成,PHP文件通过echo导出xml,并且JS文件必须获取该信息才能填充数组。我不知道我是否在这个正确的轨道上。 –

+0

我明白了。我将添加另一个答案来处理这个从JavaScript方面。 –

+0

我在答案的顶部添加了一条注释,而不是添加另一条注释。 –