Как я могу отобразить отступ XML в тег HTML code - PullRequest
5 голосов
/ 03 декабря 2011

Я хочу отобразить XML с отступом на html-странице внутри <code> Я получаю XML как из функции JavaScript

new XMLSerializer()).serializeToString(newXMLDoc)

, который дает мне непреднамеренную строку XML.

Один из способов сделать это - использовать <ul> и <li>

Но есть ли лучший способ сделать это?

Может ли XSLT помочь мне в этом случае (извините, я не очень разбираюсь в XSLT). Если да, то где мне нужно прикрепить таблицу стилей XSLT, в html-документе или в xmlString, который я добавление к тегу <code>.

Это только приложение на стороне клиента. Я ничего не могу сделать на стороне сервера.

ОБНОВЛЕНИЕ: Я также заменяю <и> в xmlString на &lt; и &gt;. Могу ли я по-прежнему использовать XSLT?

Даже после применения XSLT, данного Димитром Новатчевым, я не получаю текст с отступом, хотя я вижу, как XML с отступом, когда я применяю XSLT с использованием Kernow анализатора SAXON, но когда я делаю это в своем коде JavaScript, я получаю тот же неиспользованный код.

    //var xslt contains the XSLT provided by Dimitre Novatchev as string
    //var XMLDoc is the XMLDocument object to be transformed
    xsltProcessor=new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
    newXMLDoc = xsltProcessor.transformToDocument(xml,document);
    //This is how I am converting the transformed XML to string 
    return (new XMLSerializer()).serializeToString(newXMLDoc)

Ответы [ 2 ]

5 голосов
/ 03 декабря 2011

Я предлагаю вам использовать серверный код для этого и отправлять XML-форматированный XML вашему клиенту. Да, XSLT может помочь вам. Но вы должны HTML кодировать ваш XML на сервере.

Однако обратите внимание, что если вы удаляете \n метки (символы перевода строки) и другие пробельные символы из вашего документа (например, пробелы, табуляции и т. Д.), Вам нужно искать что-то вроде client со стороны форматера документа или что-то в этом роде. Написание такой вещи никогда не бывает легкой задачей.

Также вы можете использовать подсветку синтаксиса для XML. Один хороший пример можно найти здесь . Тогда вы можете просто использовать:

<code><pre class='brush: xml;'>
   // XML goes here.
2 голосов
/ 03 декабря 2011

Вы можете сделать это в два этапа:

Сначала обработайте XML-документ с помощью преобразования идентификаторов и с помощью инструкции <xsl:output indent="yes"/> :

<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>

При применении этого преобразования к любому документу XML (например, к этому):

<root><node/></root>

большинство процессоров XSLT (.NET XslCompiledTransform, Saxon 6.5.4 и Saxon 9.0.0.2, AltovaXML) дают желаемый результат :

<root>
  <node />
</root>

Второй шаг - выполнить операцию замены строки для результата, чтобы любой символ < был заменен на строку &lt;.

Если вам нужен более необычный формат, посмотрите, как XPath Visualizer делает это с XSLT .

...