2013-03-04 2 views
1

Не знаете, как отметить этот вопрос. У меня есть база данных документов XHTML, которые преобразуются LaTeXMLpost; однако, заявив, что они имеют вопросы валидации, является преуменьшением. Мне нужно показать их в браузере. Однако автозаполнение тегов из-за недействительной разметки помешает моей структуре.Отображение недопустимого HTML в макете

Минимальный пример:

<!doctype html> 
<html> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
    <div id="content" style="background-color:pink"> 
     <!-- yield --> 

     <section > 
     <ul> 
      <li> 
      <div> 
       <p> 
       First 
       <li> 
        <div> 
        <p> 
         Second 
        </p> 
        </div> 
       </li> 
       </p> 
      </div> 
      </li> 
     </ul> 
     </section> 
     <section> 
     Next 
     </section> 

     <!-- end yield --> 
    </div><!-- end content --> 
    </body> 
</html> 

jsfiddle

Все внешние комментарии является раскладка; внутри него находится загруженный документ. Если все было принято по номинальной стоимости, все должно быть розовым, верно?

Проблема в том, что «Следующий» загружается за пределами #content. Несмотря на то, что он действительный XML, он не соответствует DTD HTML/XHTML (или что-либо, передаваемое для DTD в HTML5), поэтому он становится искалеченным.

Вопрос: Как защитить свой макет от недействительной разметки внутри него? Могу ли я что-то сделать для контента, чтобы нормализовать его? Я загружаю его в Nokogiri перед отображением, но я все равно оказываюсь в этом беспорядке (поскольку XML не искажен, я полагаю, Nokogiri ничего не делает).

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

ответ

0

Вы можете попробовать Nokogiri, у него есть встроенная функция для исправления недействительной надбавки.

Связанные вопрос: Repairing invalid HTML with Nokogiri (removing invalid tags)

+0

I * я * с помощью Nokogiri. Однако, как я уже сказал выше, XML хорошо сформирован, нет никаких неизвестных или скрещенных тегов ... но он искажен предположениями HTML браузера о том, где следует поместить закрытый тег. К сожалению, в связанном вопросе нет ничего отдаленного, поскольку это касается недействительных тегов. :( – Amadan

+0

Как насчет использования чего-то вроде https://github.com/rgrove/sanitize, все еще основанного на nokogiri, но трансформаторы выглядят полезными. Один из способов - написать такую ​​логику, которая проверяет, действителен ли текущий родитель узла из валидатора pov если не удалите его. Худшее решение для корпуса: просто сгладьте все, что-то вроде document.text или document.clean – dakull

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