2009-10-27 5 views
0

Мне было интересно, можно ли открыть xml-файл в виде обычного текстового файла, чтобы я мог читать в каждой строке и манипулировать текстом?PHP и манипулирование файлами

+0

Почему вы хотите это сделать? вы просите о неприятностях. все многословие xml без каких-либо семантических преимуществ. –

+0

Я согласен с другими, что вы должны использовать XML-парсер или DOMDocument, но в случае, если вы хотите знать, что ответ «да». XML - это просто текстовый файл. Вы можете прочитать его с помощью 'file',' file_get_contents', 'fread' или того, что вы когда-либо читали в текстовом файле. – NawaMan

ответ

3
$xml_file = '/var/www/file.xml'; 
$contents = file_get_contents($xml_file); // Dumps the entire file into a single string 
$contents = file($xml_file); // Dumps each line into an array 

Однако я бы рекомендовал использовать simplexml_load_file() (даже если вы сказали, что вы хотели, чтобы избежать этого), потому что нет никакой гарантии того, как будет отформатирован XML. Все это может быть на одной строке или отформатировано с разрывами строк в неожиданных местах.

+0

Я хотел бы использовать simplexml_load_file(), но я не могу понять, как это использовать. Моя самая большая проблема - извлечение данных из одного узла. Я никогда не могу сказать, когда объект представляет собой массив объектов, или если его объект или значение в объекте, поэтому я думаю, что я буду придерживаться вашего примера выше прямо сейчас и разветвиться немного позже. Спасибо за вашу помощь. – cskwrd

+0

is_array(), is_object(), is_string() –

1

Почему бы не использовать любой из парсера/манипулятора XML напрямую?

Вы можете найти эти ссылки на http://www.php.net/manual/en/refs.xml.php

Если у вас есть хорошо отформатированный XML-файл затем,

$file = 'file.xml'; 

// get contents and normalize the newline 
$xml_arr = file($file); 
foreach($xml_arr as &$line){ 
    // do your manipulation to $line 
} 

$ctns = implode("\n",$xml_arr); 
file_put_contents($file,$ctns); // write back 
+1

Зачем разбивать контекст файла на '\ r \ n', если вы можете считать файл как линейный массив функцией' file'? –

+0

@ Иван - мой плохой. используется для file_get_contents. – mauris

0

Для чтения файла в массив строк с помощью file функции:

$lines = file('your_xml_file.xml'); 
foreach($lines as $line) { 
    ## do the stuff for each line 
} 
Смежные вопросы