У меня есть огромный XML-документ, который я хочу очистить, поскольку текстовый редактор без всякой причины добавил к нему перенос слов.

Итак, частичный XML-код выглядит так:

<ProfileFolder name="I/O">
<Allowed display="I/O" value="I/O"/>
<Allowed display="I/O, I/O connector"
value="4pin I/O connector"/>
<Allowed display="I/O, I/O connector"
value="6pin I/O connector"/>
<Allowed display="I/O, I/O connector"
value="configurable I/O connectors"/>
<Allowed display="I/O, I/O connector"
value="fixed I/O connectors"/>
<Allowed value="pin numbers above"/>
<Allowed value="pin numbers below"/>
<Allowed display="I/O, I/O connector" value="relay ports"/>
<Allowed display="VoIP" value="call button"/>
</ProfileFolder>

И я хочу удалить разрыв строки внутри тегов, поэтому вместо:

<Allowed display="I/O, I/O connector"
value="fixed I/O connectors"/>

Я хочу:

<Allowed display="I/O, I/O connector" value="fixed I/O connectors"/>

Я действительно ненавижу RegEx, хотя он очень мощный, и я не могу определить правильный формат кода RegEx.

Я пытался:

<(.*)\n(.*)?\/>

А также

(?<=>)(.*)\n(.*)\/>

(Что было ближе всего, но противоположно тому, что я хочу) :)

В настоящее время используется Sublime.

1
Anuga 18 Апр 2016 в 13:47

3 ответа

Лучший ответ

Что-то простое:

\n(?!<)

Должен работать в вашем случае. Это регулярное выражение означает новые строки, за которыми не следует символ <.

Вы можете найти это и заменить одним пробелом.

0
keune 18 Апр 2016 в 10:51

Используйте синтаксический анализатор XML:

$xml = simplexml_load_string( $xml );
echo $xml->asXML();

Выведет:

(...)
<Allowed display="I/O, I/O connector" value="4pin I/O connector"/>
<Allowed display="I/O, I/O connector" value="6pin I/O connector"/>
(...)

SimpleXML по умолчанию удаляет все символы новой строки внутри объявлений тегов.

0
fusion3k 18 Апр 2016 в 10:52

Это тоже будет работать

(?<!>)\n

Объяснение Regex

(?<!>)\n #Assure that the line does not end with > followed by a \n.

Итак, если строка удовлетворяет вышеуказанному условию, объедините строки

0
rock321987 18 Апр 2016 в 11:13