代码之家  ›  专栏  ›  技术社区  ›  Ahmad Farid

如何在PHP中动态地从XML中提取数据?

  •  1
  • Ahmad Farid  · 技术社区  · 15 年前

    我有一个包含XML数据的字符串变量,我想知道是否有一种简单的方法可以从文件中提取字段和数据。通过迭代 通用的

    2 回复  |  直到 15 年前
        1
  •  5
  •   Shikiryu DhruvJoshi    15 年前

    您可以使用SimpleXML。

    使用加载数据 simplexml_load_string 然后,由于 SimpleXML class

        2
  •  1
  •   wildpeaks    15 年前

    many XML parsing libraries

    不管安装了什么库 因为这是正则表达式。

    feed it an XML string and it returns an array of the whole dynamic structure :

    $xml = file_get_contents('example.xml');
    $data = xml2array($xml);
    echo "<pre>" . print_r($data, true ) . "</pre>";
    

    function xml2array($xml) {
     $xmlary = array();
     $reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
     $reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';
     preg_match_all($reels, $xml, $elements);
     foreach ($elements[1] as $ie => $xx) {
       $xmlary[$ie]["name"] = $elements[1][$ie];
       if ($attributes = trim($elements[2][$ie])) {
         preg_match_all($reattrs, $attributes, $att);
         foreach ($att[1] as $ia => $xx)
           $xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia];
       }
       $cdend = strpos($elements[3][$ie], "<");
       if ($cdend > 0) {
         $xmlary[$ie]["text"] = substr($elements[3][$ie], 0, $cdend - 1);
       }
       if (preg_match($reels, $elements[3][$ie]))
         $xmlary[$ie]["elements"] = xml2array($elements[3][$ie]);
       else if ($elements[3][$ie]) {
         $xmlary[$ie]["text"] = $elements[3][$ie];
       }
     }
     return $xmlary;
    }
    
    推荐文章