2013-10-28 3 views
0

У меня есть конструктор объекта, который использует xml-файл для установки свойств метода. Конструктор обращается к нему с помощьюразбор XML-файла не будет работать

$this->xml_file = simplexml_load_file('xml/settings.xml'); 

Это как файл XML выглядит следующим образом:

<?xml version="1.0"?> 
<settings> 
    <contents> 
     <content> 
     <item>a</item> 
     <title>A</title> 
     <keywords></keywords> 
     </content> 
     <content> 
     <item>b</item> 
     <title>B</title> 
     <keywords></keywords> 
     </content> 
     <content> 
     <item>c</item> 
     <title>C</title> 
     <keywords></keywords> 
     </content> 
    <errors_escape> 
     <error_escape>one</error_escape> 
     <error_escape>two</error_escape> 
     <error_escape>three</error_escape> 
    </errors_escape> 
</settings> 

Я хотел бы создать два массива с этой информацией. Должен выглядеть следующим образом:

protected $all_settings = array(
     array('item' => 'a', 'title' => 'A', 'keywords' => ''), 
     array('item' => 'b', 'title' => 'B', 'keywords' => ''), 
     array('item' => 'c', 'title' => 'C', 'keywords' => ''), 
    ); 
protected $errors_escape = array('one', 'two', 'three'); 

Я пробовал и читать различные вопросы по этой теме, но я ничего не могу сделать, но создавать массивы, где он говорит

[title] => SimpleXMLElement Object 
       (
        [0] => A 
       ) 

или

[title] => SimpleXMLElement Object 
       (
       ) 
+0

Ваш XML отсутствует в ''; Это опечатка или фактическая ошибка в вашем файле? – Passerby

ответ

0

Предполагая, что ваш недостающий </contents> расположен следующим образом:

<?xml version="1.0"?> 
<settings> 
    <contents> 
     <content> 
     <item>a</item> 
     <title>A</title> 
     <keywords></keywords> 
     </content> 
     <content> 
     <item>b</item> 
     <title>B</title> 
     <keywords></keywords> 
     </content> 
     <content> 
     <item>c</item> 
     <title>C</title> 
     <keywords></keywords> 
     </content> 
    </contents> <!-- missing --> 
    <errors_escape> 
     <error_escape>one</error_escape> 
     <error_escape>two</error_escape> 
     <error_escape>three</error_escape> 
    </errors_escape> 
</settings> 

Вы можете сделать что-то вроде этого:

$this->all_settings=array(); 
$this->error_escape=array(); 
foreach($this->xml_file->contents->content as $node) 
{ 
    $this->all_settings[]=array("item"=>strval($node->item),"title"=>strval($node->title),"keywords"=>strval($node->keywords)); 
} 
foreach($this->xml_file->errors_escape->error_escape as $node) 
{ 
    $this->error_escape[]=strval($node); 
} 
//print_r($this->all_settings); 
//print_r($this->error_escape); 

Online demo

Два отладки print_r выходы:

Array 
(
    [0] => Array 
     (
      [item] => a 
      [title] => A 
      [keywords] => 
     ) 

    [1] => Array 
     (
      [item] => b 
      [title] => B 
      [keywords] => 
     ) 

    [2] => Array 
     (
      [item] => c 
      [title] => C 
      [keywords] => 
     ) 

) 
Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
) 
+0

Спасибо вам большое! Я не знал о strval(), так что это то, что мне нужно. – Steven

Смежные вопросы