Как правильно добавить новые строки в строку XML в PHP? - PullRequest
2 голосов
/ 07 мая 2010

У меня есть какой-то xml, который я вручную создаю в функции, похожей на:

$xml = "<myxml>";
$xml .= "<items>";
$xml .= "<item1>blah</item1>";
$xml .= "</items>";
$xml .= "</myxml>";

Когда я вывожу строку, я хотел бы, чтобы присутствовали символы новой строки. Как я могу добавить это в строку, не влияя на веб-сервис, принимающий XML? Имеют ли значение новые строки в XML?

Ответы [ 5 ]

9 голосов
/ 07 мая 2010

Новые строки не требуются, но вы можете использовать константу PHP_EOL, которая является кроссплатформенным способом поиска символа новой строки. т.е.

$xml = "<myxml>".PHP_EOL;
2 голосов
/ 07 мая 2010

Если вам не нужно беспокоиться о различных видах разрывов строк ("\ n", "\ r \ n", "\ r"), вы можете просто использовать многострочный строковый литерал, например, например.

$xml = '<myxml>
  <items>
    <item1>blah</item1>
  </items>
</myxml>';

или

$xml = <<< EOT
<myxml>
  <items>
    <item1>blah</item1>
  </items>
</myxml>
EOT;

Но имейте в виду, что эти документы не обязательно эквивалентны

<myxml><items><item1>blah</item1></items></myxml>

http://www.w3.org/TR/REC-xml/ говорит:

2.10 Обработка пробелов
[...]
Процессор XML ДОЛЖЕН всегда передавать в приложение все символы в документе, которые не являются разметкой. Проверяющий процессор XML ДОЛЖЕН также сообщить приложению, какие из этих символов представляют собой пробелы, появляющиеся в содержимом элемента.

Специальный атрибут с именем xml: space может быть присоединен к элементу, чтобы сигнализировать о намерении, чтобы в этом элементе пробелы были сохранены приложениями

Пробелы могут быть помечены как значимые или несущественные, и потребитель может более или менее выбрать, будет ли он обрабатывать их как несущественные / значимые, например, через <xsl:strip-space .../>.

2 голосов
/ 07 мая 2010

Вы бы добавили их, выполнив $xml = "<myxml>\n";, однако они вовсе не нужны, поскольку любой синтаксический анализатор XML просто игнорирует их.

1 голос
/ 07 мая 2010

Вы можете написать вам XML, как это,

$xml = <<<XML
<myxml>
 ...
</myxml>
XML;
1 голос
/ 07 мая 2010

нет, они не имеют значения вне текстовых узлов.IE, новая строка в узле item1 будет соблюдаться

...