2012-06-01 80 views
0

我得到一個simplexml變量存儲一個xml文件,我需要做的是將其轉換爲字符串,然後將其保存在SQL數據庫文件中,我試過:XML以字符串保存在SQL(PHP)

echo $xml->asXML(); 

但它只顯示我的標籤的內容,我需要得到所有的結構來保存它。

有沒有辦法從PHP中的XML變量中獲取完整字符串?

在此先感謝

+0

請提供其餘代碼,因爲提供的單行代碼會將整個XML作爲字符串進行回顯。 –

+0

你的'$ xml'出錯了,因爲'$ xml-> asXML();'*會*做你所問的。 – Madbreaks

+0

你什麼時候說「string」你是指JSON?或只是採取.xml,並只是一個字符串?在這種情況下,爲什麼不file_get_contents($ xml_file); ?? – 2012-06-01 17:32:23

回答

1

好有人在這裏說,簡單地使用

$test = $xml_variable->asXML(); 

它會將整個xml存儲在$ test變量中,唯一的問題是當您回顯它時,它只會顯示標籤值,而不是標籤本身。這就是爲什麼我沒有工作。

無論如何,我更新了我的sql表中的xml字段,它填充了格式良好的xml字符串。

0

您可以使用PHP的XML解析功能。

php.net/manual/en/function.xml-parse.php#87920

<?php 
function xml2array($url, $get_attributes = 1, $priority = 'tag') 
{ 
    $contents = ""; 
    if (!function_exists('xml_parser_create')) 
    { 
     return array(); 
    } 
    $parser = xml_parser_create(''); 
    if (!($fp = @ fopen($url, 'rb'))) 
    { 
     return array(); 
    } 
    while (!feof($fp)) 
    { 
     $contents .= fread($fp, 8192); 
    } 
    fclose($fp); 
    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); 
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); 
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); 
    xml_parse_into_struct($parser, trim($contents), $xml_values); 
    xml_parser_free($parser); 
    if (!$xml_values) 
     return; //Hmm... 
    $xml_array = array(); 
    $parents = array(); 
    $opened_tags = array(); 
    $arr = array(); 
    $current = & $xml_array; 
    $repeated_tag_index = array(); 
    foreach ($xml_values as $data) 
    { 
     unset ($attributes, $value); 
     extract($data); 
     $result = array(); 
     $attributes_data = array(); 
     if (isset ($value)) 
     { 
      if ($priority == 'tag') 
       $result = $value; 
      else 
       $result['value'] = $value; 
     } 
     if (isset ($attributes) and $get_attributes) 
     { 
      foreach ($attributes as $attr => $val) 
      { 
       if ($priority == 'tag') 
        $attributes_data[$attr] = $val; 
       else 
        $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' 
      } 
     } 
     if ($type == "open") 
     { 
      $parent[$level -1] = & $current; 
      if (!is_array($current) or (!in_array($tag, array_keys($current)))) 
      { 
       $current[$tag] = $result; 
       if ($attributes_data) 
        $current[$tag . '_attr'] = $attributes_data; 
       $repeated_tag_index[$tag . '_' . $level] = 1; 
       $current = & $current[$tag]; 
      } 
      else 
      { 
       if (isset ($current[$tag][0])) 
       { 
        $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
        $repeated_tag_index[$tag . '_' . $level]++; 
       } 
       else 
       { 
        $current[$tag] = array (
         $current[$tag], 
         $result 
        ); 
        $repeated_tag_index[$tag . '_' . $level] = 2; 
        if (isset ($current[$tag . '_attr'])) 
        { 
         $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
         unset ($current[$tag . '_attr']); 
        } 
       } 
       $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1; 
       $current = & $current[$tag][$last_item_index]; 
      } 
     } 
     elseif ($type == "complete") 
     { 
      if (!isset ($current[$tag])) 
      { 
       $current[$tag] = $result; 
       $repeated_tag_index[$tag . '_' . $level] = 1; 
       if ($priority == 'tag' and $attributes_data) 
        $current[$tag . '_attr'] = $attributes_data; 
      } 
      else 
      { 
       if (isset ($current[$tag][0]) and is_array($current[$tag])) 
       { 
        $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; 
        if ($priority == 'tag' and $get_attributes and $attributes_data) 
        { 
         $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
        } 
        $repeated_tag_index[$tag . '_' . $level]++; 
       } 
       else 
       { 
        $current[$tag] = array (
         $current[$tag], 
         $result 
        ); 
        $repeated_tag_index[$tag . '_' . $level] = 1; 
        if ($priority == 'tag' and $get_attributes) 
        { 
         if (isset ($current[$tag . '_attr'])) 
         { 
          $current[$tag]['0_attr'] = $current[$tag . '_attr']; 
          unset ($current[$tag . '_attr']); 
         } 
         if ($attributes_data) 
         { 
          $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; 
         } 
        } 
        $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken 
       } 
      } 
     } 
     elseif ($type == 'close') 
     { 
      $current = & $parent[$level -1]; 
     } 
    } 
    return ($xml_array); 
} 
?> 
+0

這返回我一個PHP數組,安嗎?我需要的是與所有的標籤等,將其存儲在我的數據庫作爲一個字符串 –

0

也許嘗試的DomDocument:

$xml = new DomDocument(); 
$xml->loadXML($xml_str); 
echo $xml->saveXML(); 

供參考:http://us.php.net/manual/en/domdocument.loadxml.php

+0

我得到存儲在PHP變量$ my_xml 嘗試這樣我的XML字符串,但它不工作: $ XML =新的DomDocument() ; $ xml-> loadXML($ xml_cliente); echo $ xml-> saveXML(); –

+0

對不起,我改變了我的答案。 loadXML()接受一個xml字符串,而不是文件名。 – gregghz