4

我正在使用 xslt 在 xml 文件上应用一些模板并输出一个 html 页面。所以我将'xsl:output'的方法定义为'html'。但是,我需要以原始格式显示 xml 文件中的一些 xml 节点,不幸的是它们没有像我预期的那样出现在 html 页面上。

这是示例 xml 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employees>
    <employee>
        <name>Hello World</name>
        <title>UI Designer</title>
    </employee>
</employees>

我的xslt如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>

    <xsl:template match="/">
    <html>
    <head>
        <title>Example of Employee Data</title>
    </head>  
    <body>
        <h2>The following shows the structure of employee data file: </h2>
        <div style="background-color: grey">
            <xsl:copy-of select="employees/employee"/>
        </div>
        ......
    </body> 
    </html> 
    </xsl:template>
</xsl:stylesheet> 

当我查看页面源时,节点“员工”及其子节点在那里,只是没有显示在 html 页面中。我认为这是因为我将输出方法指定为“html”。但我必须生成一个 html 页面并将一些 xml 格式的节点嵌入到我的页面中......

我一直在尝试但失败了......有人可以帮我吗?谢谢!!

我希望输出页面是: 在此处输入图像描述

4

3 回答 3

4

这可能有点晚了,但我最终在这个页面上寻找完全相同的东西。

通过 XLST 在 HTML 页面上复制 XML 数据的一种非常简单的方法是使用框架。我在这里找到了这个解决方案,显然它已经过时且不推荐使用,但我刚刚测试过并且它正在工作。

<xmp>
    <xsl:copy-of select="."/>
</xmp>

正如您从屏幕截图中看到的那样,我在下面有一个带有 XML 数据的漂亮手风琴! 在此处输入图像描述

于 2014-04-28T14:59:58.477 回答
3

如果浏览器要显示<employee>(尖括号和所有),那么转换的序列化输出需要是&lt;employee&gt;. XSLT 3.0 有一个功能可以让你做

<xsl:value-of select="serialize(emp)"/>

这会给你想要的;其他一些处理器可能会将其作为扩展功能提供。如果没有,您可以使用用 XSLT 本身编写的序列化程序,例如:http: //fgeorges.org/xslt/serial/或此处列出的序列化程序之一: http ://www.mhonarc.org/archive/html /xsl-list/2010-08/msg00186.html

于 2013-04-02T06:18:20.547 回答
2

您可能会考虑使用一个<textarea>元素并应用相同的样式属性来设置背景颜色,并利用一些 JavaScript(例如jQuery Autosize)让 textarea 自动调整以适应内容:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Example of Employee Data</title>
                <script src='http://www.jacklmoore.com/js/jquery.js'></script>
                <script src='http://www.jacklmoore.com/js/jquery.autosize.js'></script>
                <script type="text/javascript">
                    $(document).ready(function(){
                        $('textarea').autosize();   
                    });
                </script>
            </head>  
            <body>
                <h2>The following shows the structure of employee data file: </h2>
                <textarea style="background-color: grey; width:100%">
                    <xsl:text>&#xa;</xsl:text>
                    <xsl:copy-of select="employees/employee"/>
                </textarea>
                ......
            </body> 
        </html> 
    </xsl:template>
</xsl:stylesheet> 
于 2013-04-02T00:21:05.583 回答