PHP SimpleXML не сохраняет разрывы строки в атрибутах XML

Будут Вами обрабатывающий много CSV? Если так, необходимо также рассмотреть использование библиотеки, чтобы сделать это. Не перестраивайте колесо. К сожалению, я не нашел библиотеку вполне столь же простой как библиотека CSV Python, но я видел FileHelpers (свободный) рассмотренный в MSDN Magazine, и это выглядит довольно хорошим. Существуют, вероятно, другие свободные библиотеки там также. Все это зависит от того, сколько обработки Вы будете делать все же. Часто это растет и растет, пока Вы не понимаете, что были бы более обеспеченным использованием библиотеки.

7
задан Community 23 May 2017 в 12:33
поделиться

2 ответа

Объект для новой строки - & # 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(">&#10;<",">\n<", $xml);

Предположение, основанное на вашем примере, состоит в том, что любые новые строки, которые встречаются внутри узла или атрибута, будут иметь больше текста на следующей строке, а не < , чтобы открыть новый элемент.

Конечно, это не сработает, если в следующей строке будет текст, заключенный в элемент уровня строки.

4
ответ дан 6 December 2019 в 10:01
поделиться

При использовании SimpleXML разрывы строк, кажется, теряются.

Да, это ожидается ... на самом деле от любого совместимого синтаксического анализатора XML требуется, чтобы символы новой строки в значениях атрибутов представляли простые пробелы . См. нормализация значения атрибута в спецификации XML.

Если предполагалось, что в значении атрибута должен быть настоящий символ новой строки, XML должен был включать символ & # 10; ссылка вместо необработанной новой строки.

13
ответ дан 6 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: