Инструмент CLI для форматирования файлов XML с сохранением пустых строк и комментариев - PullRequest
0 голосов
/ 01 января 2019

Существует ли какой-либо инструмент CLI для Linux, который форматирует файлы XML, сохраняя пустые строки и комментарии?Я пробовал xmllint, tidy и xmlstarlet, но все, кажется, сосредоточены на полной очистке XML-файлов, а не на отступах и пробелах.

1 Ответ

0 голосов
/ 02 января 2019

Попробуйте xmlindent.Он имеет несколько параметров, таких как -nbe и -nba и другие, которые настраивают обработку пробелов до и после.

При заданном входном XML-файле

<?xml version="1.0"?>
<Response>
  <TroubleResponse>
    <Check>
      <DStatus>
        <GID>123456789</GID>
        <FLAG/>
      </DStatus>
    </Check>
    <RAM>
      <Details>
        <RAMID>5555777788
        </RAMID>
      </Details>
    </RAM>
    <RAM>
      <Details>
        <RAMID>
            5555777788</RAMID>
      </Details>
    </RAM>
  </TroubleResponse>
</Response>

Выход можно настроить с помощьюследующие параметры (выдержка):

-t     Use tabs instead of spaces
-nas   Suppress newline after start-tag
-nae   Suppress newline after end-tag
-nbs   Suppress newline before start-tag
-nbe   Suppress newline before end-tag
-f     Force newline on elements without children

Таким образом, xmlindent -f и xmlindent -nba будут производить следующий вывод:

<?xml version="1.0"?>
<Response>
    <TroubleResponse>
        <Check>
            <DStatus>
                <GID>123456789       <!-- Change -->
                </GID>
                <FLAG/>
            </DStatus>
        </Check>
        <RAM>
            <Details>
                <RAMID>5555777788
                </RAMID>
            </Details>
        </RAM>
        <RAM>
            <Details>
                <RAMID>             <!-- Change -->
                    5555777788
                </RAMID>
            </Details>
        </RAM>
    </TroubleResponse>
</Response>

И xmlindent -nbe будет производить следующий вывод:

<?xml version="1.0"?>
<Response>
    <TroubleResponse>
        <Check>
            <DStatus>
                <GID>123456789</GID>
                <FLAG/>
            </DStatus>
        </Check>
        <RAM>
            <Details>
                <RAMID>5555777788
                </RAMID>
            </Details>
        </RAM>
        <RAM>
            <Details>
                <RAMID>                  <!-- Change -->
                5555777788</RAMID>
            </Details>
        </RAM>
    </TroubleResponse>
</Response>

xmlindent не идеален, поскольку не всегда обеспечивает ожидаемый результат, но может быть несколько настроен.

...