Будут Вами обрабатывающий много CSV? Если так, необходимо также рассмотреть использование библиотеки, чтобы сделать это. Не перестраивайте колесо. К сожалению, я не нашел библиотеку вполне столь же простой как библиотека CSV Python, но я видел FileHelpers (свободный) рассмотренный в MSDN Magazine, и это выглядит довольно хорошим. Существуют, вероятно, другие свободные библиотеки там также. Все это зависит от того, сколько обработки Вы будете делать все же. Часто это растет и растет, пока Вы не понимаете, что были бы более обеспеченным использованием библиотеки.
Объект для новой строки - & # 10;
. Я играл с вашим кодом, пока не нашел то, что помогло. Я предупреждаю вас, что это не очень элегантно:
//First remove any indentations:
$xml = str_replace(" ","", $xml);
$xml = str_replace("\t","", $xml);
//Next replace unify all new-lines into unix LF:
$xml = str_replace("\r","\n", $xml);
$xml = str_replace("\n\n","\n", $xml);
//Next replace all new lines with the unicode:
$xml = str_replace("\n"," ", $xml);
Finally, replace any new line entities between >< with a new line:
$xml = str_replace("> <",">\n<", $xml);
Предположение, основанное на вашем примере, состоит в том, что любые новые строки, которые встречаются внутри узла или атрибута, будут иметь больше текста на следующей строке, а не <
, чтобы открыть новый элемент.
Конечно, это не сработает, если в следующей строке будет текст, заключенный в элемент уровня строки.
При использовании SimpleXML разрывы строк, кажется, теряются.
Да, это ожидается ... на самом деле от любого совместимого синтаксического анализатора XML требуется, чтобы символы новой строки в значениях атрибутов представляли простые пробелы . См. нормализация значения атрибута в спецификации XML.
Если предполагалось, что в значении атрибута должен быть настоящий символ новой строки, XML должен был включать символ & # 10;
ссылка вместо необработанной новой строки.