当前位置: 首页 > 面试题库 >

用JavaScript漂亮地打印XML

逄兴昌
2023-03-14
问题内容

我有一个字符串,它表示要打印的非缩进XML。例如:

<root><node/></root>

应该变成:

<root>
  <node/>
</root>

语法高亮不是必需的。为了解决该问题,我首先将XML转换为添加回车符和空格,然后使用pre标记输出XML。为了添加新行和空白,我编写了以下函数:

function formatXml(xml) {
    var formatted = '';
    var reg = /(>)(<)(\/*)/g;
    xml = xml.replace(reg, '$1\r\n$2$3');
    var pad = 0;
    jQuery.each(xml.split('\r\n'), function(index, node) {
        var indent = 0;
        if (node.match( /.+<\/\w[^>]*>$/ )) {
            indent = 0;
        } else if (node.match( /^<\/\w/ )) {
            if (pad != 0) {
                pad -= 1;
            }
        } else if (node.match( /^<\w[^>]*[^\/]>.*$/ )) {
            indent = 1;
        } else {
            indent = 0;
        }

        var padding = '';
        for (var i = 0; i < pad; i++) {
            padding += '  ';
        }

        formatted += padding + node + '\r\n';
        pad += indent;
    });

    return formatted;
}

然后,我像这样调用该函数:

jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));

这对我来说很好用,但是当我编写上一个函数时,我认为必须有更好的方法。所以我的问题是,给定XML字符串以将其漂亮地打印在html页面中,您是否知道更好的方法?欢迎任何可以完成此工作的JavaScript框架和/或插件。我唯一的要求是在客户端进行此操作。


问题答案:

从问题的文本中, 我得到的印象是期望字符串结果 ,而不是HTML格式的结果。

如果是这样, 实现此目的的最简单方法是使用标识转换和一条<xsl:outputindent="yes"/>指令来处理XML文档

<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和Saxon9.0.0.2,AltovaXML)都会产生所需的结果:

<root>
  <node />
</ root>


 类似资料:
  • 我正在寻找一种漂亮的方法来打印地图。 <代码>贴图。toString()给我:

  • 问题内容: 我正在寻找一种漂亮地打印的好方法。 给我: 我希望地图输入值具有更大的自由度,并且正在寻找更多类似这样的东西: 我写了这段代码: 但是我敢肯定,有一种更优雅,更简洁的方法可以做到这一点。 问题答案: 或将您的逻辑放在一个整洁的小班上。 用法: 注意:您也可以将该逻辑放入实用程序方法中。

  • 问题内容: 如何以易于阅读的格式(对人类读者而言)显示JSON?我主要是在寻找缩进和空格,甚至可能是颜色/字体样式/等。 问题答案: 漂亮打印是在中本地实现的。第三个参数启用漂亮的打印并设置要使用的间距: 如果需要语法高亮显示,则可以使用一些正则表达式魔术,例如: 在这里查看操作:jsfiddle 或下面提供的完整代码段:

  • 问题内容: Go中有类似Ruby的东西吗? 例如,在Ruby中,您可以编写: 输出将是: 我能找到的最接近的东西是 问题答案: 如果您的目标是避免导入第三方软件包,则另一个选择是使用json.MarshalIndent: 输出: 工作示例:http : //play.golang.org/p/SNdn7DsBjy

  • 问题内容: 我正在构建一个PHP脚本,该脚本将JSON数据提供给另一个脚本。我的脚本将数据构建到一个大的关联数组中,然后使用来输出数据。这是一个示例脚本: 上面的代码产生以下输出: 如果您的数据量很少,那就太好了,但是我希望遵循以下几点: 有没有办法在PHP中做到这一点而又没有丑陋的破解?似乎有人在Facebook上找到了答案。 问题答案: PHP 5.4提供了用于调用的选项。 http://ph

  • 问题内容: 有人知道在Go中漂亮地打印JSON输出的简单方法吗? 库存的 http://golang.org/pkg/encoding/json/ 软件包似乎不包含此功能 (编辑:确实如此,请参见接受的答案),而且快速的Google并没有发现任何明显的问题。 我正在寻找的用途既可以打印出JSON 的结果,又可以从任何地方格式化一个充满JSON的字符串,因此出于调试目的而更易于阅读。 问题答案: 通