Обрезать пробелы внутри тегов? - PullRequest
0 голосов
/ 18 апреля 2020

Я использую xmllint для переформатирования некоторых xml. Я замечаю, что кажется, что оставил вложенный текст в покое. Например, это

<tag>
<p>
<i>
test
</i>
</p>
</tag>

становится этим

<tag>
    <p>
        <i>
test
</i>
    </p>
</tag>

Есть ли способ заставить его поместить текст сразу после открывающего тега и сразу же следовать за ним с закрывающим тегом? В идеале я хотел бы что-то вроде этого:

<tag>
    <p>
        <i>test</i>
    </p>
</tag>

Я полагаю, это равносильно тому, что он игнорирует начальные и конечные пробелы внутри тегов. Я могу сделать это с некоторой предварительной обработкой через regex, но есть ли какой-нибудь нативный способ?

TIA.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Обычно --noblanks удаляет игнорируемые / незначимые пробелы, но в этом случае xmllint видит эти пробелы как значимые и не будет их игнорировать.

В дополнение к предложению "аккуратно" в другом ответе, Вы также можете использовать xmlstarlet для нормализации пробелов всех текстовых узлов ...

Командная строка

xmlstarlet ed -u "//text()" -x "normalize-space()" input.xml

Вывод

<tag>
  <p>
    <i>test</i>
  </p>
</tag>
0 голосов
/ 19 апреля 2020

Вы должны иметь возможность использовать tidy для этого:

echo '<tag>
<p>
<i>
test
</i>
</p>
</tag>' |    tidy -xml -iq

Вывод:

<tag>
  <p>
    <i>test</i>
  </p>
</tag>
...