Как отобразить xml в javascript?

Как говорится в вопросе, он просто ускользнул из моей памяти, как отображать xml в javascript, я хочу отобразить некоторый исходный xml внутри div на странице, который находится рядом с обработанным результатом xml в другом div.

Не могу вспомнить, был ли эквивалент javascript escape для преобразования сущностей на клиенте

Примечание: файлы xml обслуживаются как есть с сервера, поэтому мне нужно решение на стороне клиента

Примечание: основная проблема заключается в том, что XML некорректно отображается в большинстве браузеров, все скобки и атрибуты исчезают, оставляя текст, не похожий на xml.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
62 377
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Одним из способов было бы использовать два элемента iframe с атрибутом src, установленным в соответствующий файл XML, доступный с сервера (при условии, что он предоставляется через виртуальный каталог):

<iframe src = "/myapp/Document1.xml"><iframe src = "/myapp/Document2.xml">

В качестве альтернативы вы потенциально можете использовать запрос типа AJAX для извлечения XML-документов, а затем динамически встраивать их в HTML-документ, используя что-то вроде:

getElementById("myDiv").innerText = ajax.response;

проблема в том, что XML некорректно отображается в большинстве браузеров, все скобки и атрибуты исчезают, оставляя текст, не похожий на xml.

Robert Gould 08.12.2008 14:45

Оба этих метода должны показать это нормально. Обратите внимание, что во втором методе используется «innerText», а не «innerHTML», иначе произойдет то, что вы описываете.

J c 08.12.2008 14:52

Также обратите внимание, что если вы хотите встроить XML в документ HTML перед его отправкой клиенту, вы можете использовать ASP (предполагая сервер IIS) для кодирования XML, чтобы он отображался правильно, используя что-то вроде: <% = Server. HTMLEncode (sValue)%>

J c 08.12.2008 15:03

@Daniel: Верно, использование document.createTextNode, вероятно, будет более кроссбраузерным способом сделать это.

J c 08.12.2008 15:09
Ответ принят как подходящий

Если вы хотите, чтобы ваш XML был браузер для рендеринга как XML, он должен быть в собственном документе, например iframe или frame. DIV не справится!

Кроме того, в заголовке HTTP запроса, обслуживающего iframe, вы должны отправить Content-Type: text/xml, чтобы браузер мог понять, что этот контент является XML.

Но, если вам действительно нужно увидеть это в DIV, вам придется самостоятельно создать функцию рендеринга XMLXML2HTML. Вы можете использовать для этого тег HTMLPRE, если ваша строка XML уже отформатирована (разрывы строк и табуляции). В этом случае вам придется заменить < на &gt; в строке XML.

Заключение:The browser не может отображать XML и HTML в одном документе. Если вам это нужно, вам просто нужно это исправить.

Internet Explorer может отображать как XML, так и HTML в одном документе, просто вставьте XML в тег <xmp> </xmp>. Не рекомендация, поскольку я считаю, что это устаревшее (и, конечно, работает только в IE), просто к сведению.

J c 08.12.2008 16:05

Также обратите внимание, что DIV может нормально отображать XML, если он правильно закодирован. Как минимум, я бы предложил кодировку> (>), <(<) и & (& amp;).

J c 08.12.2008 16:15

Вот вам функция:

<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. Хотя он доступен для веб-страниц, он не является частью какого-либо стандарта, и уровень поддержки в других браузерах неизвестен».

Tomalak 08.12.2008 16:30

Сам по себе XMLSerializer не будет работать во всех браузерах, отсюда и оператор if. Функция должна работать во всех браузерах - по крайней мере, во всех современных браузерах (MSIE6 + и т. д.).

Andrew G. Johnson 08.12.2008 19:44

Возвращает ли функция XML в кодировке HTML или просто строку XML? Я считаю, что установка innerHTML в строку XML приведет к проблеме рендеринга, которую OP пытается решить.

J c 08.12.2008 20:46

Проблема в том, что вам нужно экранировать символы, которые 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

SandRock 02.07.2012 12:13

Получите ваш XML с помощью Ajax и просто поместите результат в textarea. Стилизуйте текстовое поле как хотите.

Как, например, создать стиль XML?

Yster 27.05.2015 15:46

Это самый простой способ отображения XML в виде текста на той же странице для копирования и вставки:

var xml = document.getElementById('svg_element').innerHTML;
document.getElementById('svg_pre').innerText = xml; 

Это работает для меня relpaced .innerHTML на .innerText, он принимает xml / html

AMD 11.08.2017 09:51

Другие вопросы по теме