2009-09-29 3 views
0

У меня есть xml-файл, содержащий иерархические данные. Теперь мне нужно получить некоторые из этих данных в php-массив. Я использую xsl для получения данных, которые я хочу отформатировать как php-массив. Но когда я его печатаю, он оставляет все вкладки и дополнительные пробелы и разрывы строк и т. Д., Которые мне нужно избавиться, чтобы превратить их в плоскую строку (я полагаю!), А затем преобразовать эту строку в массив.xsl to php array

В xsl я выводим как текст и имеет indent = "no" (который ничего не делает). Я попытался вырезать \ t \ n \ r и т. Д., Но он вообще не влияет на вывод.

Есть ли действительно хорошая функция php, которая может удалить все форматирование, за исключением отдельных пробелов? Или здесь больше происходит, я не знаю или другого способа сделать то же самое?

ответ

2

Прежде всего, использование вывода xsl для формирования вашего массива PHP довольно неэффективно и неэффективно. Я бы настоятельно предложил перейти к чему-то вроде класса domdocument, доступного в PHP (http://www.php.net/manual/en/class.domdocument.php). Если вы должны придерживаться своего текущего метода, попробуйте использовать регулярные выражения для удаления лишних пробелов.

$string = preg_replace('/\s+/', '', $string); 

или

$string = preg_replace('/\s\s+/', ' ', $string); 

сохранить единое белое пространство.

+0

+1 для использования явных функций библиотеки XML вместо xsl для этого. Помимо упомянутого класса DOMDocument, вы можете проверить http://de2.php.net/simplexml как альтернативу. –

0

Я создал a class for opensource library, что вы можете использовать, и посмотрите на пример о том, как создать массив из XML (и просто вытащите «хорошие» части).

ИСПОЛЬЗОВАНИЕ XML

Так суть проблемы, вероятно, сохранение данных в XML как можно дольше. Поэтому после XSL перевода вы бы что-то вроде:

<xml> 
    <data>value 
      with newline 
    </data> 
    <data>with  lots of whitespace</data> 
</xml> 

Тогда вы могли бы петля корыта, что данные, как:

$xml = simplexml_load_string($xml_string); 
foreach($xml as $data) 
{ 
    // use str_replace or a regular expression to replace the values... 
    $data_array[] = str_replace(array(" ", "\n"), "", $data); 
} 

// $data_array is the array you want! 

Использование JSON

Однако, если вы можете» t выводит XSL в XML, а затем перебирает его. После этого вы можете использовать XSL для создания объекта JSON строку и преобразовать его в массив таким образом, XSL будет выглядеть следующим образом:

{ 
    "0" : "value 
      with newline", 
    "1" : "with  lots of whitespace" 
} 

Тогда вы могли бы корыто цикла, что данные, такие как:

$json_array = json_encode($json_string, TRUE); // the TRUE is to make an array 
foreach($json_array as $key => $value) 
{ 
    // use str_replace or a regular expression to replace the values... 
    $json_array[$key] = str_replace(array(" ", "\n"), "", $value); 
} 

Либо вы должны будете вытащить значения в PHP, потому что обработка XSLT пространств и новых строк довольно рудиментарна.