Я хочу сериализовать 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 как текст.
Итак, вы хотите, чтобы преобразовать документ, который не очень хорошо сформированную в тот, который является? Браузеры не играют по хорошо сформированным правилам, если это не xhtml. –
@MikeCheel Я думаю, он ожидает, что DOM будет хорошо сформирован, хотя браузеры терпимы к искаженному HTML. – Barmar
@ Барнар Правильно, вот что я говорю. Если это не xhtml, вы не сможете ожидать ничего хорошего (и браузеры заполняют материал, как им нравится). Я думаю, что ему нужно будет сделать массаж, чтобы получить то, что он хочет. –