SED - HTML-кодирование между определенными тегами в файле XML - PullRequest
1 голос
/ 24 октября 2011

В настоящее время я работаю над коротким сценарием SED, который должен кодировать HTML-части XML-файла. Сценарий в настоящее время выглядит так:

sed.exe "/<messageData>/,/<\/messageData>/ {/<messageData>/b;/<\/messageData>/b; s/</\&lt;/g; s/>/\&gt;/g; }" %1 >%2

Таким образом, по сути, замените все <и> на <и>, между тегами и.

Этот скрипт прекрасно работает с красивым напечатанным XML, то есть

<?xml version="1.0" encoding="ISO-8859-1"?>
<Messages>
    <messageData>
        <test>DATA</test>
    </messageData>
</Messages>

выходит как

<?xml version="1.0" encoding="ISO-8859-1"?>
<Messages>
    <messageData>
        &lt;test&gt;DATA&lt;/test&gt;
    </messageData>
</Messages>

что мне и нужно. Моя проблема в том, что файлы, которые мне нужны, обрабатываются не очень хорошо, все в одной строке, например:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Messages><messageData><test>DATA</test></messageData></Messages>

И с этим форматом скрипт больше не работает. Будет ли возможно изменить мой скрипт для работы с обоими форматами?

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

Полагаю, я мог бы просто создать другой сценарий SED, который вставлял бы разрыв строки после каждого> в файле, и после этого запускал сценарий, который я создал сейчас. Однако я предполагаю, что это не будет очень эффективным с точки зрения производительности (два прохода над каждым файлом).

Есть предложения?

С уважением Daniel

1 Ответ

1 голос
/ 26 октября 2011

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

sed.exe -i "s/\(>\)\(<\)/\1\n\2/g" %1
sed.exe "/<messageData>/,/<\/messageData>/ {/<messageData>/b;/<\/messageData>/b; s/</\&lt;/g; s/>/\&gt;/g; }" %1 >%2
...