xml 导出 php 代码仅返回 xml 文件的一个父级,我需要它们

Posted

技术标签:

【中文标题】xml 导出 php 代码仅返回 xml 文件的一个父级,我需要它们【英文标题】:xml export php code returns only one parent of the xml file i need them all 【发布时间】:2015-03-02 12:14:52 【问题描述】:
    $rss_tags = array(
    'drawNo',
    'drawTime',
    'result',
    );
  $rss_item_tag = 'draw';
  $rss_url = "http://applications.opap.gr/DrawsRestServices/kino/drawDate/21-12-2014.xml";

  $rssfeed = rss_to_array($rss_item_tag,$rss_tags,$rss_url);


  echo '<pre>';
  print_r($rssfeed);

/*$total=1;
  foreach($rssfeed as $item)
        
          if($total<750)
          echo '<div><h1>Κλήρωση: '.$item['drawNo']. '  Αριθμοί: ' .$item['result'].'</h1></div>';
          $total++;
          
        
*/

  function rss_to_array($tag, $array, $url) 
    $doc = new DOMdocument();
    $doc->load($url);
    $rss_array = array();
    $items = array();
    foreach($doc->getElementsByTagName($tag) AS $node)  //se auth thn epanalhpsh epanalamvenete toses fores oses oi klhrwseis tis hmeras
      foreach($array AS $key => $value)  //$array einai ta rss tags
          if($value=="result")
            for($i=1;$i<=20;$i++)$items["result"] = $node->getElementsByTagName("result")->item(0)->nodeValue;
          
          $items[$value] = $node->getElementsByTagName($value)->item(0)->nodeValue;

      
      array_push($rss_array, $items);
    
    return $rss_array;
  

你好phpers,这是我读取一些xml信息的代码,但我有一个很大很大的问题。

首先检查xml源: http://applications.opap.gr/DrawsRestServices/kino/drawDate/21-12-2014.xml

结构是这样的:

<draws>
  <draw>
     <drawNo>
     <drawTime>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>
     <result>

我的代码只返回第一个条目,但我想同时获得 20 个条目,有人可以帮我吗?

【问题讨论】:

【参考方案1】:

我不确定你到底想输出什么,但也许这会适合你的目的。

下面的代码将 xml 转换为数组。

<?php
$xmlstring = file_get_contents("http://applications.opap.gr/DrawsRestServices/kino/drawDate/21-12-2014.xml");

// converts $xmlstring to multidimensional array
$arrayMD = json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);

echo "<pre>";
var_dump($arrayMD);
echo "</pre>";

// converts multidimensional array to one-dimensional array
// in other words: "flattens" a multidimensional array
$array = new RecursiveIteratorIterator(new RecursiveArrayIterator($arrayMD));
foreach($array as $v) 
  echo $v . "<br>";

?>

输出如下:

array(1) 
  ["draw"]=>
  array(157) 
    [0]=>
    array(3) 
      ["drawNo"]=>
      string(6) "475781"
      ["drawTime"]=>
      string(25) "2014-12-21T09:00:00+02:00"
      ["result"]=>
      array(20) 
        [0]=>
        string(1) "6"
        [1]=>
        string(1) "7"
        [2]=>
        string(2) "12"
        [3]=>
        string(2) "13"
        [4]=>
        string(2) "15"
        [5]=>
        string(2) "16"
...

参考:

simplexml_load_string json_encode json_decode(当第二个参数设置为TRUE时,返回的对象将被转换为关联数组。) JSON Predefined Constants (array) - 转换为数组,Type Juggling How to Flatten a Multidimensional Array?

更新:

访问多维数组的某些特定元素:

$someVar = $arrayMD["draw"][0]["result"][7];
echo $someVar; // outputs: 12

此外,请查看list 函数(将变量分配为数组)或extract(将变量从数组导入当前符号表)。

或者最简单的方法就是使用几个foreach 来输出它们,将数字相加,选择每个“平局”的每五个“结果”值或其他任何东西。 (这取决于您接下来要如何处理这些值。)

【讨论】:

Dmytro 你能告诉我如何把所有这些 [0]=> string(1) "6" [1]=> string(1) "7" [2]=> string( 2) "12" [3]=> string(2) "13" [4]=> string(2) "15" [5]=> string(2) "16" 转换成变量,以便我可以使用它们? echo $array['draw'][$k]['result'][$i] 这是答案谢谢 dmytro

以上是关于xml 导出 php 代码仅返回 xml 文件的一个父级,我需要它们的主要内容,如果未能解决你的问题,请参考以下文章

RAML:如何仅导出特定类型的 XSD

WebService,ASMX文件使用XML格式数据传递参数验证与获取XML格式返回值的一种方式

仅输出特定节点 PHP XML

在 PHP 中显示特定的 XML 节点

西门子导出xml怎么看

php 从xml简单导出到php