首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML不使用XSL显示

XML不使用XSL显示
EN

Stack Overflow用户
提问于 2013-04-14 18:54:43
回答 2查看 132关注 0票数 1

加载XML文件时,不显示任何数据。它似乎没有使用XSL文件,我只是得到了一个空白屏幕。请大家看一看,看看为什么会这样。提前谢谢。

下面是我的代码:

XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="computers.xsl"?>
<!DOCTYPE computers SYSTEM "computers.dtd">
<computers>
    <computer>
    <cpu ghz="3.5" unlocked="Yes">Intel i7 3770k</cpu>
    <motherboard>MSI M-Power</motherboard>
    <ram>8</ram>
    <storage>
        <hdd>1000</hdd>
        <ssd>128</ssd>
    </storage>
    <gpu group="ATI">7950</gpu>
    <psu>750</psu>
</computer>
<computer>
    <cpu ghz="3.5" unlocked="Yes">Intel i5 3570k</cpu>
    <motherboard>ASRock Extreme 4</motherboard>
    <ram>8</ram>
    <storage>
        <hdd>1000</hdd>
    </storage>
    <gpu group="ATI">7870</gpu>
    <psu>600</psu>
</computer>
<computer>
    <cpu ghz="3.5" unlocked="No">Intel i5 3550</cpu>
    <motherboard>ASRock Extreme 3</motherboard>
    <ram>8</ram>
    <storage>
        <hdd>500</hdd>
    </storage>
    <gpu group="GeForce">9600GT</gpu>
    <psu>500</psu>
</computer>
 </computers>

DTD:

代码语言:javascript
复制
<!ELEMENT computer (cpu,motherboard,ram,storage,gpu,psu) >
<!ELEMENT cpu (#PCDATA)>
<!ELEMENT motherboard (#PCDATA)>
<!ELEMENT ram (#PCDATA)>
<!ELEMENT storage(hdd,ssd*)>
<!ELEMENT hdd (#PCDATA)>
<!ELEMENT ssd (#PCDATA)>
<!ELEMENT gpu (#PCDATA)>
<!ELEMENT psu (#PCDATA)>

<!ATLIST cpu
ghz CDATA #REQUIRED
unlocked (Yes|No) "No">
<!ATLIST gpu
group (ATI|GeForce) "ATI">

XSL:

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
    <title>HELLO WORLD</title>
</head>
<body>
    <xsl:for-each select="computers/computer">
        <table border="1">
            <tr>
                <td>
                    <xsl:value-of select="cpu"/>
                </td>
                <td>
                    <xsl:value-of select="cpu/@ghz"/>
                </td>
                <td>
                    <xsl:value-of select="cpu/@unlocked"/>
                </td>
            </tr>
            <tr>
                <td>
                    <xsl:value-of select="motherboard"/>
                </td>
            </tr>
            <tr>
                <td>
                    <xsl:value-of select="ram"/>
                </td>
            </tr>
            <tr>
                <td>
                    <xsl:for-each select="storage"/>
                        <xsl:value-of select="hdd"/>
                        <xsl:value-of select="ssd"/>
                    </xsl:for-each>
                </td>
            </tr>
            <tr>
                <td>
                    <xsl:value-of select="gpu"/>
                </td>
            </tr>
            <tr>
                <td>
                    <xsl:value-of select="psu"/>
                </td>
            </tr>
        </table>
    </xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-14 23:11:17

除了XSLT样式表是格式错误(不是格式良好的XML)文档之外,似乎没有其他问题。

1.在第33行替换

代码语言:javascript
复制
                <xsl:for-each select="storage"/>

使用的

代码语言:javascript
复制
                <xsl:for-each select="storage">

XSLT 2.从源文档中删除XSLT <!DOCTYPE computers SYSTEM "computers.dtd"> -- 转换不使用它,因此不需要它。XSLT转换只使用来自DTD的有关ID属性的数据--在提供的DTD中没有任何数据。

在此替换和删除之后,转换运行时没有问题,并且当应用于提供的XML文档时:

代码语言:javascript
复制
<computers>
    <computer>
        <cpu ghz="3.5" unlocked="Yes">Intel i7 3770k</cpu>
        <motherboard>MSI M-Power</motherboard>
        <ram>8</ram>
        <storage>
            <hdd>1000</hdd>
            <ssd>128</ssd>
        </storage>
        <gpu group="ATI">7950</gpu>
        <psu>750</psu>
    </computer>
    <computer>
        <cpu ghz="3.5" unlocked="Yes">Intel i5 3570k</cpu>
        <motherboard>ASRock Extreme 4</motherboard>
        <ram>8</ram>
        <storage>
            <hdd>1000</hdd>
        </storage>
        <gpu group="ATI">7870</gpu>
        <psu>600</psu>
    </computer>
    <computer>
        <cpu ghz="3.5" unlocked="No">Intel i5 3550</cpu>
        <motherboard>ASRock Extreme 3</motherboard>
        <ram>8</ram>
        <storage>
            <hdd>500</hdd>
        </storage>
        <gpu group="GeForce">9600GT</gpu>
        <psu>500</psu>
    </computer>
</computers>

会生成以下结果(我猜这是想要的结果)

代码语言:javascript
复制
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

      <title>HELLO WORLD</title>
   </head>
   <body>
      <table border="1">
         <tr>
            <td>Intel i7 3770k</td>
            <td>3.5</td>
            <td>Yes</td>
         </tr>
         <tr>
            <td>MSI M-Power</td>
         </tr>
         <tr>
            <td>8</td>
         </tr>
         <tr>
            <td>1000128</td>
         </tr>
         <tr>
            <td>7950</td>
         </tr>
         <tr>
            <td>750</td>
         </tr>
      </table>
      <table border="1">
         <tr>
            <td>Intel i5 3570k</td>
            <td>3.5</td>
            <td>Yes</td>
         </tr>
         <tr>
            <td>ASRock Extreme 4</td>
         </tr>
         <tr>
            <td>8</td>
         </tr>
         <tr>
            <td>1000</td>
         </tr>
         <tr>
            <td>7870</td>
         </tr>
         <tr>
            <td>600</td>
         </tr>
      </table>
      <table border="1">
         <tr>
            <td>Intel i5 3550</td>
            <td>3.5</td>
            <td>No</td>
         </tr>
         <tr>
            <td>ASRock Extreme 3</td>
         </tr>
         <tr>
            <td>8</td>
         </tr>
         <tr>
            <td>500</td>
         </tr>
         <tr>
            <td>9600GT</td>
         </tr>
         <tr>
            <td>500</td>
         </tr>
      </table>
   </body>
</html>

所有四个浏览器: IE,FF,Safari和Opera四个浏览器都能正确处理computers.xml并产生想要的显示

我没有得到Chrome的任何东西--众所周知,这个浏览器在处理本地文件时有问题。

票数 1
EN

Stack Overflow用户

发布于 2013-04-14 21:08:54

您的XSLT不是格式良好的,您的XSLT处理器(我怀疑是浏览器)可能只是拒绝处理它。您应该删除此for-each中的斜杠

代码语言:javascript
复制
<xsl:for-each select="storage"/>

一旦这样做了,我相信XSLT将会成功地工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15998265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档