Отключить HTML-теги - PullRequest
       6

Отключить HTML-теги

1 голос
/ 14 февраля 2011

Мы создаем сценарий для преобразования определенных файлов XHTML в файлы Word, однако способ, которым файлы Word и файлы HTML обрабатывают изменения форматирования и весьма различаются.

Например, у нас может быть разделследующим образом:

<p>Title

    <ol>
        <li><p>List 1</p></li>
        <li><p>List 2</p></li>
    </ol>

Additional Information</p>

Это изменяется между файлами, поскольку некоторые из них являются устаревшими файлами, написанными до определенных стандартов, и каждый файл был написан разными людьми, создавая несоответствия.Многие файлы сильно вложены, а многие нет.Проблема возникает при обнаружении того, когда файл вложен, поскольку, хотя он может прекрасно отображаться в веб-браузере, HTML-документ, эквивалентный документу Word, должен быть отформатирован аналогично следующему, чтобы его можно было легко преобразовать в формат XML, используемый Word (с использованием предыдущегопример):

<p>Title</p>

<li>List 1</li>
<li>List 2</li>

<p>Addition Information</p>

Как документ Word, использующий стандарты OpenXML, в значительной степени опирается на разделы формата, явно начинающиеся и заканчивающиеся до создания нового раздела.К сожалению, это применимо везде, даже выделенные жирным шрифтом или курсивом.

Я уже создал небольшое регулярное выражение для преобразования списков в нужный формат, найдя тип списка, удалив теги p и преобразовавтег li в тег oli для упорядоченных списков и uli для неформатированных списков.Это, в свою очередь, затем преобразуется в правильное форматирование XML для документа Word.

Проблема, с которой я сталкиваюсь, заключается в том, что гораздо сложнее обнаружить, например, вложенный тег ap, как в приведенном выше примере:и если да, то для добавления нового закрывающего тега p перед тегом li и нового открывающего тега p после списка для создания не вложенных линейных тегов, которые мы ищем.

Мой вопросесли кто-то знает, есть ли способ сделать это относительно просто, например, с помощью регулярного выражения или чего-то в этом роде, или если вообще будет проще вернуться ко всем устаревшим файлам и очистить их до текущих стандартов, чтобы сделатьони совместимы.(Это не является предпочтительным, так как у нас есть много этих файлов, и мы не хотим, чтобы какие-либо несоответствия были пропущены, создавая неправильно отформатированные документы Word, прежде чем мы сможем их перехватить).

Как правило, мы не используем большезатем теги p, ol / ul / li, em, strong, table / th / tr / td и a.Я также нашел некоторый текст, который не находится внутри каких-либо тегов HTML, который было бы предпочтительнее заключать в тег ap.

Примечание: PDF не является приемлемым вариантом, поскольку мы ищем простоту использованияи ограничения размера скрипта обычно запрещают это.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Я бы предложил использовать библиотеку HTML, такую ​​как htmLawed, чтобы удалить теги, с которыми вы не хотите иметь дело.

http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/

Фрагмент из списка их функций:

  *  understands improperly spaced tag content (like, spread over more than a line) and properly spaces them  `
  *  attempts to balance tags for well-formedness  ^~`
  *  understands when omitable closing tags like </p> (allowed in HTML 4, transitional, e.g.) are missing  ^~`
  *  attempts to permit only validly nested tags  ^~`
  *  option to remove or neutralize bad content ^~`
  *  attempts to rectify common errors of plain-text misplacement (e.g., directly inside blockquote) ^~`
1 голос
/ 18 февраля 2011

Я нашел самый простой способ сделать это - удалить конечные теги в контенте, а затем удалить первый тег.Замените каждый начальный тег общим тегом конца раздела, за которым следует соответствующий открывающий тег раздела.Наконец добавьте первый открывающий тег и последний закрывающий тег в начало и конец содержимого соответственно, и теперь он работает нормально.Спасибо всем за помощь.

...