簡體   English   中英

如何從PHP中的XML動態提取數據?

[英]How to dynamically extract data from XML in PHP?

我有一個包含XML數據的字符串變量,我想知道是否有一種簡單的方法可以從文件中提取字段和數據。 通過迭代的通用方式,而無需在代碼中指定標簽名稱。

您可以使用SimpleXML。

使用simplexml_load_string加載數據,然后通過SimpleXML類,可以進行循環以將xml解析為數組

所謂的,它很簡單。

XML解析庫很多 ,每個都有自己的優勢和煩惱,因此您將找到廣泛的解決方案。

但是,這里有個不錯的摘要,它是一個正則表達式, 無論安裝了什么庫 ,它都小巧,快捷,功能強大。

您向它提供一個XML字符串,它返回整個動態結構的數組

$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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM