Как говорится в вопросе, он просто ускользнул из моей памяти, как отображать xml в javascript, я хочу отобразить некоторый исходный xml внутри div на странице, который находится рядом с обработанным результатом xml в другом div.
Не могу вспомнить, был ли эквивалент javascript escape для преобразования сущностей на клиенте
Примечание: файлы xml обслуживаются как есть с сервера, поэтому мне нужно решение на стороне клиента
Примечание: основная проблема заключается в том, что XML некорректно отображается в большинстве браузеров, все скобки и атрибуты исчезают, оставляя текст, не похожий на xml.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Одним из способов было бы использовать два элемента iframe с атрибутом src, установленным в соответствующий файл XML, доступный с сервера (при условии, что он предоставляется через виртуальный каталог):
<iframe src = "/myapp/Document1.xml"><iframe src = "/myapp/Document2.xml">
В качестве альтернативы вы потенциально можете использовать запрос типа AJAX для извлечения XML-документов, а затем динамически встраивать их в HTML-документ, используя что-то вроде:
getElementById("myDiv").innerText = ajax.response;
Оба этих метода должны показать это нормально. Обратите внимание, что во втором методе используется «innerText», а не «innerHTML», иначе произойдет то, что вы описываете.
Также обратите внимание, что если вы хотите встроить XML в документ HTML перед его отправкой клиенту, вы можете использовать ASP (предполагая сервер IIS) для кодирования XML, чтобы он отображался правильно, используя что-то вроде: <% = Server. HTMLEncode (sValue)%>
@Daniel: Верно, использование document.createTextNode, вероятно, будет более кроссбраузерным способом сделать это.
Если вы хотите, чтобы ваш XML был браузер для рендеринга как XML, он должен быть в собственном документе, например iframe или frame. DIV не справится!
Кроме того, в заголовке HTTP запроса, обслуживающего iframe, вы должны отправить Content-Type: text/xml, чтобы браузер мог понять, что этот контент является XML.
Но, если вам действительно нужно увидеть это в DIV, вам придется самостоятельно создать функцию рендеринга XMLXML2HTML. Вы можете использовать для этого тег HTMLPRE, если ваша строка XML уже отформатирована (разрывы строк и табуляции). В этом случае вам придется заменить < на > в строке XML.
Заключение:The browser не может отображать XML и HTML в одном документе. Если вам это нужно, вам просто нужно это исправить.
Internet Explorer может отображать как XML, так и HTML в одном документе, просто вставьте XML в тег <xmp> </xmp>. Не рекомендация, поскольку я считаю, что это устаревшее (и, конечно, работает только в IE), просто к сведению.
Также обратите внимание, что DIV может нормально отображать XML, если он правильно закодирован. Как минимум, я бы предложил кодировку> (>), <(<) и & (& amp;).
Вот вам функция:
<script type = "text/javascript">
<!--
function xml_to_string(xml_node)
{
if (xml_node.xml)
return xml_node.xml;
else if (XMLSerializer)
{
var xml_serializer = new XMLSerializer();
return xml_serializer.serializeToString(xml_node);
}
else
{
alert("ERROR: Extremely old browser");
return "";
}
}
// display in alert box
alert(xml_to_string(my_xml));
// display in an XHTML element
document.getElementById("my-element").innerHTML = xml_to_string(my_xml);
-->
</script>
Из Центра разработчиков Mozilla: «XMLSerializer в основном полезен для приложений и расширений, основанных на платформе Mozilla. Хотя он доступен для веб-страниц, он не является частью какого-либо стандарта, и уровень поддержки в других браузерах неизвестен».
Сам по себе XMLSerializer не будет работать во всех браузерах, отсюда и оператор if. Функция должна работать во всех браузерах - по крайней мере, во всех современных браузерах (MSIE6 + и т. д.).
Возвращает ли функция XML в кодировке HTML или просто строку XML? Я считаю, что установка innerHTML в строку XML приведет к проблеме рендеринга, которую OP пытается решить.
Проблема в том, что вам нужно экранировать символы, которые HTML-синтаксический анализатор будет интерпретировать как разметку: <,>, &, а в некоторых случаях "и"
Базовый JavaScript не предоставляет вам этого, но многие дополнительные библиотеки предоставляют.
Например, у Prototype есть: http://www.prototypejs.org/api/string/escapeHTML
Если вы не хотите использовать весь JavaScript-фреймворк только для этого ...
function insertLiteral(literalString, targetElement)
{
var textNode = document.createTextNode(literalString);
targetElement.appendChild(textNode)
return textNode;
}
// test it (for the example, I assume #targetDiv is there but empty)
var xmlString = "<this><is_some><xml with='attributes' /></is_some></this>";
var targetElement = document.getElementById("targetDiv");
var xmlTextNode = insertLiteral(xmlString, targetElement);
#targetDiv можно стилизовать с помощью CSS:
#targetDiv {
font-family: fixed;
white-space: pre;
}
Это лучший ответ. createTextNode
Получите ваш XML с помощью Ajax и просто поместите результат в textarea. Стилизуйте текстовое поле как хотите.
Как, например, создать стиль XML?
Это самый простой способ отображения XML в виде текста на той же странице для копирования и вставки:
var xml = document.getElementById('svg_element').innerHTML;
document.getElementById('svg_pre').innerText = xml;
Это работает для меня relpaced .innerHTML на .innerText, он принимает xml / html
проблема в том, что XML некорректно отображается в большинстве браузеров, все скобки и атрибуты исчезают, оставляя текст, не похожий на xml.