Отображать XML-строку на странице HTML

#jquery #html #xml #asp.net-mvc-3

#jquery #HTML #xml #asp.net-mvc-3

Вопрос:

Из моего бэкэнда я извлекаю строку, содержащую некоторые XML-данные. Когда я показываю это (теперь только с помощью @Model.XM), я вижу красивую длинную строку, содержащую XML-данные. Есть ли способ отформатировать это как древовидную структуру? Как с помощью плагина jquery или чего-то еще? Я попробовал поискать в Google, но не смог его найти.

На странице также есть другие данные, это не только данные XML.

Ответ №1:

Все, что вам нужно, это рекурсивный цикл, который превратит дочерние узлы XML-документа в элементы списка HTML. Попробуйте что-то подобное (непроверенное):

 var html = '<ul><li>'   xml.documentElement.nodeName   '</li>';
var html  = displayTree(xml);
var html  = '</ul>';

function displayTree(xml) {
    var str = '';
    if ($(xml).children().length) {
        str  = '<ul>';
        $(xml).children().each(function() {
            str  = '<li>'   this.nodeName   '</li>';
        });
        str  = '</ul>';
        str  = displayTree(xml.childNodes);
    });
    return str;
}
  

Ответ №2:

Вы могли бы использовать XSLT.

 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
  

Ключ заключается в

 <xsl:output indent="yes"/>
  

Если вы примените вышеуказанное преобразование к вашему XML, он выйдет с правильным отступом.
Более подробная информация:http://www.w3.org/TR/xslt#copying

Комментарии:

1. Я согласен, что XSLT — лучший метод для использования, но приведенный выше код просто «красиво напечатает» XML. Вам нужно будет преобразовать или добавить теги XHTML, чтобы обеспечить вывод в виде достойного списка в XHTML.

2. Почему список? В вопросе упоминается только древовидная структура, я предположил, что это означает правильный отступ