【问题标题】:How to output HTML file from XML and XSLT stylesheet如何从 XML 和 XSLT 样式表输出 HTML 文件
【发布时间】:2011-04-26 22:20:25
【问题描述】:

我已经创建了一个 XML 数据文档和一个 XSLT 样式表,并且我想输出一个基于这两者的 HTML 文档。我的样式表有标签,我的 XML 文档有处理器指令(以及各种“xsl:value-of”引用)。我的问题是,让 XSLT 处理器(据我所知,它内置于所有 Web 浏览器)读取 XML 和 XSLT 样式表文件并输出 HTML 文档的实际“机制”是什么,然后将显示在浏览器?我一直在阅读的 XML 书没有指定这一点! 谢谢

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获得解释。

标签: html xml xslt


【解决方案1】:

您可以使用 Javascript API 以“正常方式”运行 XSL 转换,也可以使用 xml-stylesheet 处理指令,如下所示:

将此加载到您的浏览器中...

<?xml version="1.0"?>
<?xml-stylesheet href="demo.xslt" type="text/xsl"?>
<data>
    <first>first</first>
    <second>second</second>
</data>

和样式表,将它作为 demo.xslt 保存在与 XML 文件相同的目录中

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <html>
            <head><title>Xslt browser demo</title></head>
            <body>
                    Here's my data:
                <xsl:for-each select="/data/*"><b><xsl:value-of select="."/></b></xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

这适用于我在 Linux 上的 Firefox。

【讨论】:

    【解决方案2】:

    以下是用于创建 HTML 文件的 java 代码。当您运行执行此代码时,将创建 out.html 文件。

    package xslt;
    
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.*;
    import javax.xml.transform.stream.*;
    import java.io.*;
    
    
    class XSLT {
        public static void main ( String argv[] ) throws Exception {
        File stylesheet = new File("xslt-example.xsl");
        File xmlfile  = new File("SigmodRecord.xml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(xmlfile);
        StreamSource stylesource = new StreamSource(stylesheet);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer(stylesource);
        DOMSource source = new DOMSource(document);
        //The Html output is in out.html
        StreamResult result = new StreamResult("out.html");
        transformer.transform(source,result);
        }
    }
    

    【讨论】:

      【解决方案3】:

      我的问题是,实际情况是什么 获得 XSLT 的“机制” 处理器(据我所知,它是 内置于所有网络浏览器)阅读 XML 和 XSLT 样式表文件和 输出 HTML 文档,它将 然后在浏览器上显示?

      这是用于调用其 XSLT 处理器的特定 HTML 浏览器的任务。然后浏览器将 XSLT 转换的结果解释为应该显示的 HTML。请注意,通常浏览器不需要支持 XSLT 预处理,因此可能存在没有关联 XSLT 处理器且不支持 xml-stylesheet PI 的 type="text/xsl" 伪属性的浏览器。

      有关更多信息,请阅读 W3C 规范“Associating Style Sheets with XML Documents

      要以这种有点原始的方式测试 XSLT 转换,您可以使用浏览器打开 XML 文件(做好功课并学习如何从浏览器打开本地文件)并检查使用"View Source" 或类似命令的结果。

      我当然不推荐这种原始技术最好使用许多现有的 XSLT IDE 之一,例如 XSelerator、oXygen、Visual Studio 等。

      【讨论】:

      • 感谢您的回复。但是假设我想在本地计算机上进行“测试”,以查看浏览器输出的 html 文档。我该怎么做?
      • 这是一个不同的问题。请提出一个新问题。这个新问题与 XSLT 无关:您只需要使用 File--> Open 在浏览器中打开文件,或者在特定浏览器中打开文件的菜单顺序是什么。
      • 不,我的问题是相关的,但我认为我的措辞并不明确。我的问题是,假设我有一个 XML 文件和一个关联的 XSLT 样式表,我想将这些文件输入到浏览器中以测试它将显示的 HTML 文件。我该怎么做?谢谢。
      • @Jack:我的回答现在包括您在 cmets 中要求的测试信息。
      【解决方案4】:

      Dimitre 的答案正是您所需要的。但是这里有一个例子:

      XML:

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
      <document>
        ...
      </document>
      

      在任何(不是真的,但你明白...)浏览器中打开前面的 XML 文档,它将使用 stylesheet.xsl 转换 XML 文档并显示结果。

      当涉及到浏览器 imo 中的转换、糟糕的支持和只有 XSLT 1.0 时,这实际上是一团糟。 MIME 类型text/xsl 甚至不是“正确的”,但它是浏览器最常支持的一种。正确的 MIME 类型应该是 application/xslt+xml,但据我所知,任何 (?) 浏览器都不支持。 请参阅下面的 Alejandros 评论。

      【讨论】:

      • 实际上,XSLT 没有 MIME 类型。 application/xslt+xml 是 XSLT 2.0 WD 中的提议。因此,test/xmlapplication/xml(对于纯粹主义者)是 发送 XSLT 样式表的正确 MIME 类型。 xml-stylesheet PI 的type 伪属性只是在test/csstest/xsl 之间进行判断。
      • @Alejandro:你说得对,我没有明显地更新自己或阅读一些旧的东西。很抱歉,感谢您的澄清!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2012-05-07
      • 2020-10-06
      • 2011-06-25
      相关资源
      最近更新 更多