2012-05-02 3 views
1

Рассмотрим фрагмент, полученный от экспорта:Удаление/прессование лишних тегов XML/HTML из командной строки?

<!--l. 266--><p class="indent" > 
       <span 
class="ptmr8t-x-x-90">“</span><span 
class="ptmri8t-x-x-90">Blah blah blah, </span> 
       <span 
class="ptmri8t-x-x-90">blah blah, blah blah blah, </span> 
       <span 
class="ptmri8t-x-x-90">blah blah, blah blah, blah blah blah </span> 
       <span 
class="ptmri8t-x-x-90">blah blah, blah </span> 
       <span 
class="ptmri8t-x-x-90">blah blah, blah blah, blah</span> 
       <span 
class="ptmri8t-x-x-90">blah blah, blah </span><span 
class="ptmr8t-x-x-90">(</span><a 
href="#X0-cite"><span 
class="ptmr8t-x-x-90">Testing </span> 
       <span 
class="ptmr8t-x-x-90">Ref, </span><a 
href="#X0-cite"><span 
class="ptmr8t-x-x-90">1980</span></a></a><span 
class="ptmr8t-x-x-90">, pg.1)”</span> 
     </p> 

EDIT: Я согласен с комментариями, что не существует никакого общего способа указать, что это лишнее - это то, что я имел в виду: Этот фрагмент кода по существу, означало представлять одну строку в качестве оказанной HTML:

firefox_html_render

... и так как все это «бла-бла ...» в строке содержания предназначается, чтобы быть в том же формате, я считаю, кусочки i t несут отдельные теги span, которые указывают один и тот же формат (и действительно, это те же теги без изменения атрибутов, просто <span class="ptmri8t-x-x-90">), чтобы быть лишними - даже если они не вложены.


Запуск XML форматтера/довольно принтера на этом (скажем, xml_pp -i a.xml) для отступа наши метки приведет к следующим кодом:

<!--l. 266--><p class="indent"> 
    <span class="ptmr8t-x-x-90">“</span> 
    <span class="ptmri8t-x-x-90">Blah blah blah, </span> 
    <span class="ptmri8t-x-x-90">blah blah, blah blah blah, </span> 
    <span class="ptmri8t-x-x-90">blah blah, blah blah, blah blah blah </span> 
    <span class="ptmri8t-x-x-90">blah blah, blah </span> 
    <span class="ptmri8t-x-x-90">blah blah, blah blah, blah</span> 
    <span class="ptmri8t-x-x-90">blah blah, blah </span> 
    <span class="ptmr8t-x-x-90">(</span> 
    <a href="#X0-cite"> 
    <span class="ptmr8t-x-x-90">Testing </span> 
    <span class="ptmr8t-x-x-90">Ref, </span> 
    <a href="#X0-cite"> 
     <span class="ptmr8t-x-x-90">1980</span> 
    </a> 
    </a> 
    <span class="ptmr8t-x-x-90">, pg.1)”</span> 
</p> 

Заметим, что здесь:

  • мы имеют последовательности <span class="X">text A, </span><span class="X">text B, </span>, которые бессмысленны, поскольку они могут быть уменьшены до <span class="X">text A, text B, </span>
  • У нас есть двойные Ted <a href="#X0-cite"> - опять-таки бессмысленно, может обойтись без внутренней одной

В конце концов, я хотел бы, чтобы запустить что-то, и получить следующий «уплотненного» код:

<!--l. 266--><p class="indent" > 
       <span 
class="ptmr8t-x-x-90">“</span><span 
class="ptmri8t-x-x-90">Blah blah blah, 
       blah blah, blah blah blah, 
       blah blah, blah blah, blah blah blah 
       blah blah, blah 
       blah blah, blah blah, blah 
       blah blah, blah </span><span 
class="ptmr8t-x-x-90">(<a 
href="#X0-cite"> 
Testing 
       Ref, 
1980</a> 
, pg.1)”</span> 
     </p> 

... где текст пробельные (и отдельные части лишних тегов удаляются по каждой линии отдельно), и обрабатывается случай, подобный <a href="#X0-cite">, прерывающий последовательность <span> с; который я мог бы приукрасить к:

<!--l. 266--><p class="indent"> 
    <span class="ptmr8t-x-x-90">“</span> 
    <span class="ptmri8t-x-x-90">Blah blah blah, 
       blah blah, blah blah blah, 
       blah blah, blah blah, blah blah blah 
       blah blah, blah 
       blah blah, blah blah, blah 
       blah blah, blah </span> 
    <span class="ptmr8t-x-x-90">(<a href="#X0-cite"> 
Testing 
       Ref, 
1980</a> 
, pg.1)”</span> 
</p> 

 

Есть (Linux) инструмент командной строки, которая может помочь мне сделать «уплотнению», как описано? awk или регулярных выражений сценариев могли бы сделать это, я думаю, - но это, кажется, своего рода комплекс, который ...

Большое спасибо заранее за любые ответы,
Ура!

+1

Ну, технически нет ничего лишнего в этих тегах. Может быть, вы их не нуждаетесь, но вы * можете * использовать их для чего-то.Как таковой вряд ли будет конкретный инструмент для удаления вещей * вы считаете излишним ... – deceze

+0

Большое спасибо за эту заметку @deceze - я согласен, и теперь я добавил редактирование сообщения, надеюсь, что это разъяснит - приветствия ! – sdaau

ответ

1

Нет ничего заранее подготовленного, что вы могли бы использовать.

Что вы просите изменить DOM, который будет сгенерирован из разметки. Обычный случай для минимизации направлен на изменение разметки без изменения модели, которую она представляет.

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

+0

Большое спасибо за это, @Quentin - я согласен с этим; Я не так много думал о DOM, так как большую часть информации, необходимую для создания стиля «предполагаемого выпуска». Также этот пост: [Как удалить неиспользуемые, вложенные теги HTML span с помощью регулярного выражения Perl? - Переполнение стека] (http://stackoverflow.com/questions/667130/how-can-i-remove-unused-nested-html-span-tags-with-a-perl-regex) имеет немного больше подобных проблем , и предложение для инструментов ... еще раз спасибо - ура! – sdaau

Смежные вопросы