【问题标题】:XML + XSL to XSLT for an HTMLXML + XSL 到 XSLT 的 HTML
【发布时间】:2015-08-06 09:39:43
【问题描述】:

对不起,如果我的帖子不太好,我表达自己的能力不是很好。

我想要什么:

我有一个 XML 和一个 XSL 数据,我想将其转换为 HTML 的 XSLT。 在转换时,我使用 Altova XMLSpy 和这个网页:http://www.freeformatter.com/xsl-transformer.html

我有什么:

我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Style.xsl"?>
<Configuration>
 <Environment>
  ...
 </Environment>
  <Configurations>
  ...
  <Config>
  ...  
  </Config>
 </Configurations>
</Configuration>

我的 XSL:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <table border="4">
                    <xsl:apply-templates select="Configuration"/>
                </table>
            </body>
        </html>&gt;
</xsl:template>
    <xsl:template match="Environment">
        <tr>Environment</tr>
        <br/>
        <td> <th>Text</th>
    <xsl:value-of select="Environment"/>
        </td>
       <td> <th>Text2</th>
    <xsl:value-of select="config"/>
        </td>
           ...
           ... 
</xsl:template>
</xsl:stylesheet>

这只是我如何构建它的一个示例。

到目前为止一切都很好,但是后来:

问题:

如果我在 Firefox 中启动我的 XML,现在一切正常。如果我在 IE 或 Chrome 中启动它,我只会得到 XML 数据而不是表格。 尝试在 XSLT 中转换它会给我这个错误: 无法对您的 XML 文件执行 XSL 转换。空

我希望你能帮助我。我是 XML/XSl/XSLT 的血腥初学者,但我希望我的帖子能为您提供所需的信息。

问候

最大

【问题讨论】:

    标签: html xml xslt null transformation


    【解决方案1】:

    你犯了一个非常常见的初学者错误:

    <xsl:template match="Environment">
       <tr>Environment</tr>...
       <xsl:value-of select="Environment"/>
    

    在此模板中,上下文节点是一个 Environment 元素,您的 xsl:value-of 指令正在寻找该元素的名为 Environment 的子元素。但是您的 Environment 元素(我假设)没有任何 Environment 孩子。你应该写什么(我假设)是

    <xsl:value-of select="."/>
    

    但是,我认为这不是问题的全部。它不能解释所描述的所有症状。您实际上犯了另一个初学者的错误,即尝试在浏览器中运行您的 XSLT 代码,然后再在其他地方进行测试。基于浏览器的 XSLT 引擎给出了糟糕的诊断(即使您使用像 Firebug 这样的东西)。让您的代码首先在桌面环境中运行——最好是像 oXygen 这样的 XML IDE。然后,您将得到对问题所在的正确解释。

    【讨论】:

    • 您好,谢谢您的回复。到目前为止,我明白你告诉我的要点。唯一让我困惑的是浏览器问题。我在 Stylus Studio 中编写了我的代码,它在那里工作得也非常好。即使在预览中。好吧,我现在在 altova 中再次编写它,如果问题仍然存在,请随时更新
    • 好的,谢谢,这是新信息。如果它在 Stylus Studio 中有效,但在浏览器中无效,则大大缩小了可能出错的范围。但我无法从给出的信息中确切看出问题所在。
    • 嘿,你是世界上最好的人 :-) 我修好了它,我真的不知道如何,但它现在可以正常工作了。我刚刚开始了一个新项目并复制粘贴了我的东西,它开始工作了!我非常感谢您的帮助!继续你救了我的 Stackoverflow 社区! :-)
    【解决方案2】:

    您好,这是您的代码的修改版本。

    XSL 模板匹配必须匹配您希望应用模板的 XML 节点。

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
      <xsl:stylesheet version="2.0">
        <xsl:template match="Configuration">
          <html>
            <body>
              <table border="4">
                <xsl:apply-templates select="Environment"/>
              </table>
              <table border="4">
                <xsl:apply-templates select="Configurations"/>
              </table>
            </body>
          </html>
        </xsl:template>
        <xsl:template match="Environment">
          <tr>
            <th>
              <xsl:value-of select="name()"/>
            </th>
          </tr>
          <tr>
            <td>
              <xsl:value-of select="."/>
            </td>
          </tr>
        </xsl:template>
        <xsl:template match="Configurations">
          <tr>
            <th>
              <xsl:value-of select="name()"/>
            </th>
          </tr>
          <tr>
            <td>
              <xsl:apply-templates select="Config"/>
            </td>
          </tr>
        </xsl:template>
        <xsl:template match="Config">
          <tr>
            <th>
              <xsl:value-of select="name()"/>
            </th>
          </tr>
          <tr>
            <td>
              <xsl:value-of select="."/>
            </td>
          </tr>
        </xsl:template>
      </xsl:stylesheet>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多