2013-10-25 3 views
1

Я хочу сериализовать DOM в JavaScript, и ожидать, чтобы получить хорошо сформированный XML-документ, однако meta тег не закрыт:Как получить хорошо сформированный XML документа DOM в Javascript?

<html> 
    <head> 
    <meta name="keywords" content="test"> 
    </head> 
    <body> 
    <p>test 
    <pre id='x'/> 
    </body> 
    <script> 
    document.getElementById('x').appendChild(
     document.createTextNode(new XMLSerializer().serializeToString(document)) 
    ); 
    </script> 
</html> 

Выход содержит недопустимый XML, где meta не закрыт. Однако p закрыт:

<html> 
    <head> 
    <meta name="keywords" content="test"> 
    </head> 
    <body> 
    <p>test</p> 
    </body> 
</html> 

То же самое поведение в Chrome 30.0 и Phantomjs 1.9.2.

Я ожидаю хорошо сформированного XML-вывода от XMLSerializer, даже несмотря на то, что мой ввод HTML не работает. Почему этого не происходит и что такое обходной путь? Мне нужно преобразовать DOM в XML как текст.

+2

Итак, вы хотите, чтобы преобразовать документ, который не очень хорошо сформированную в тот, который является? Браузеры не играют по хорошо сформированным правилам, если это не xhtml. –

+0

@MikeCheel Я думаю, он ожидает, что DOM будет хорошо сформирован, хотя браузеры терпимы к искаженному HTML. – Barmar

+0

@ Барнар Правильно, вот что я говорю. Если это не xhtml, вы не сможете ожидать ничего хорошего (и браузеры заполняют материал, как им нравится). Я думаю, что ему нужно будет сделать массаж, чтобы получить то, что он хочет. –

ответ

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