XSL在直接加载到浏览器时不呈现XML

时间:2015-08-09 07:52:51

标签: xml xslt

我正在尝试将我的XSL链接到我的XML但是当我在Chrome或其他网络浏览器中加载XML页面时,我得到一个空白页。

我不确定它究竟出了什么问题。

下面是我的XML

<?xml-stylesheet type="text/xsl" href="vaults.xsl"?>

<vaults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vaults.xsd">

  <vault>
    <vaultname>Los Angeles Vault </vaultname>  
    <state>California</state>
    <location>Los Angeles (Cathedral)</location>
    <description>The Vault-Tec demonstration vault. It was not part of the experiment, and was the Master's vault under the Cathedral. </description>
    <fate> </fate>
    <appearance>Fallout</appearance>
   </vault> 
</vaults>

以下是XSL

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

<xsl:template match="/">
  <html>
  <body>
  <h2>Vaults</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">vault</th>
    </tr>
    <xsl:for-each select="vaults/vault">
    <tr>
      <td><xsl:value-of select="vaultname" /></td>
      <td><xsl:value-of select="state" /></td>
      <td><xsl:value-of select="location" /></td>
      <td><xsl:value-of select="description" /></td>
      <td><xsl:value-of select="fate" /></td>
      <td><xsl:value-of select="appearance" /></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

  

然而,当我在Chrome或其他网络浏览器中加载XML页面时,我会得到一个空白页面。

如果您从Chrome中的本地磁盘you will get a blank page加载它,在Internet Explorer中也是如此。这是出于安全原因。

我测试了你的XML和XSLT,在本地存储了这两个文件,并在Firefox中打开了它,并且只是工作了#34;:

enter image description here

注意,我建议您使样式表更容易阅读和维护。即,沿着这些方向的东西(通常,使用具有匹配模板的xsl:apply-templates更容易维护并且更好地防止输入中的更改):

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

  <xsl:template match="/">
    <html>
      <body>
        <h2>Vaults</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th style="text-align:left">vault</th>
          </tr>
          <xsl:apply-templates select="vaults/vault" />
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="vault">
    <tr>
      <xsl:apply-templates select="*" />
    </tr>
  </xsl:template>

  <xsl:template match="*[parent::vault]">
    <td><xsl:value-of select="." /></td>
  </xsl:template>

</xsl:stylesheet>