繁体   English   中英

在浏览器中显示xml和xslt

[英]display xml and xslt in a browser

我有2个文件,分别是file.xml和file.xsl。 我正在寻找如何在浏览器中查看结果。 从我的研究中,我了解到只有IE才能获得xml解析器,而对于其他浏览器,我需要一个Sercer脚本。 我还将这些行放在xml文件的顶部:

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

和这些lignes在我的xsl文件的顶部:

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

但是,即使我使用的是IE(11),我也只能输入没有任何样式的文本。 我想在表中显示要素,但没有任何要素。

如果有未发现的错误,我将为您提供该表的代码,但是通常可以。

这是xsl代码:

<xsl:template match="/">
<html>
<body>

    <h2>List of Workers</h2>
    <table border="1">
        <tr bgcolor="#9acd32">
            <th rowspan=3> ID </th>
            <th colspan=5> Basic Information </th>
            <th rowspan=3> Picture </th>
            <th colspan=2> Skills enable </th>
        </tr>
        <tr>
            <td rowspan=2> Name </td>
            <td colspan=3> Address </td>
            <td rowspan=2> Phone Number </td>
            <td rowspan=2> Skill 1 </td>
            <td rowspan=2> Skill 2 </td>
        </tr>
        <tr>
            <td> Number </td>
            <td> Street </td>
            <td> Town </td>
        </tr>
        <xsl:for-each select="List_Of_Employe/Employe">
        <xsl:sort select="Name"/>
        <tr>
            <td><xsl:value-of select="ID"/></td>
            <td><xsl:value-of select="Basic_Information/Name"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Number"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Street"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Town"/></td>
            <td><xsl:value-of select="Basic_Information/Phone_Number"/><td/>
            <td><xsl:value-of select="Photo"/></td>
            <td><xsl:value-of select="Skills_Enable/Skill_1"/></td>
            <td><xsl:value-of select="Skills_Enable/Skill_2"/></td>
        </tr>
        </xsl:for-each>
    </table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

这是我的xml代码:

<List_Of_Employe>



    <Employe>

        <ID> 1235 </ID>

        <Basic_Information>

            <Name> James Bond</Name>

            <Address>
                <Number > 05 </Number>
                <Street> Queen's street </Street>
                <Town> London </Town>
            </Address>

            <Phone_Number> 07876543210 </Phone_Number>

        </Basic_Information>

        <Photo> James.png </Photo>

        <Skills_Enable>
            <Skill_1> XML </Skill_1>
            <Skill_2> C# </Skill_2>
        </Skills_Enable>

    </Employe>

    <Employe>

        <ID> 1236 </ID>

        <Basic_Information>

            <Name> Sherlock Holmes </Name>

            <Address>
                <Number > 100 </Number>
                <Street> Prince's street </Street>
                <Town> London </Town>
            </Address>

            <Phone_Number> 07765432100 </Phone_Number>

        </Basic_Information>

        <Photo> Sherlock.png </Photo>

        <Skills_Enable>
            <Skill_1> JavaScript </Skill_1>
            <Skill_2> Python </Skill_2>
        </Skills_Enable>

    </Employe>


 </List_Of_Employe>

希望你能帮助我

Mayeul

您的样式表需要一些改进,但是您离解决方案并不遥远。 这不是一个漂亮的解决方案,但是它可以成功地转换您的输入XML。 (一种更好的解决方案将使用多个模板,而不是包含多个for-each语句的巨大模板)。

清理一些东西

你说:

从我的研究中,我了解到只有IE才能获得xml解析器,而对于其他浏览器,我需要一个Sercer脚本

不,那不是真的。 每个主要的浏览器都有一个不错的XML解析器。 您不需要任何服务器端代码即可解析XML。 同样,每个主要浏览器(IE,Chrome,Firefox,Safari)都附带XSLT处理器,尽管仅支持XSLT 1.0。

但是,即使我使用的是IE(11),我也只能输入没有任何样式的文本。

转换的结果是,除了从输入XML中获取所有文本内容外,什么也没有得到,这通常意味着:没有一个模板可以匹配输入元素。 没有应用任何代码,并且采取了默认操作:调用内置模板,该模板仅输出所有文本节点。

我不清楚为什么在您的情况下不应该应用任何模板,请让我知道我在下面建议的样式表是否会更改输出。

样式表

我对您的样式表进行了以下更改:

  • 有一个流浪<td/>应该是</td> ,因为它结束了td元素。
  • 为所有属性值添加引号。 属性值绝对必须用引号( "..." ),因为XSLT代码本身必须是格式正确的XML。

HTML解析器可以处理很多错误(例如,未引用的属性值),但是XML解析器对此非常严格。

<?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>List of Workers</h2>
    <table border="1">
        <tr bgcolor="#9acd32">
            <th rowspan="3"> ID </th>
            <th colspan="5"> Basic Information </th>
            <th rowspan="3"> Picture </th>
            <th colspan="2"> Skills enable </th>
        </tr>
        <tr>
            <td rowspan="2"> Name </td>
            <td colspan="3"> Address </td>
            <td rowspan="2"> Phone Number </td>
            <td rowspan="2"> Skill 1 </td>
            <td rowspan="2"> Skill 2 </td>
        </tr>
        <tr>
            <td> Number </td>
            <td> Street </td>
            <td> Town </td>
        </tr>
        <xsl:for-each select="List_Of_Employe/Employe">
        <xsl:sort select="Name"/>
        <tr>
            <td><xsl:value-of select="ID"/></td>
            <td><xsl:value-of select="Basic_Information/Name"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Number"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Street"/></td>
            <td><xsl:value-of select="Basic_Information/Address/Town"/></td>
            <td><xsl:value-of select="Basic_Information/Phone_Number"/></td>
            <td><xsl:value-of select="Photo"/></td>
            <td><xsl:value-of select="Skills_Enable/Skill_1"/></td>
            <td><xsl:value-of select="Skills_Enable/Skill_2"/></td>
        </tr>
        </xsl:for-each>
    </table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

还可以考虑将以下行添加到样式表中:

<xsl:output method="html" indent="yes"/>

明确指出您要输出HTML。

XHTML输出

<html>
   <body>
      <h2>List of Workers</h2>
      <table border="1">
         <tr bgcolor="#9acd32">
            <th rowspan="3"> ID </th>
            <th colspan="5"> Basic Information </th>
            <th rowspan="3"> Picture </th>
            <th colspan="2"> Skills enable </th>
         </tr>
         <tr>
            <td rowspan="2"> Name </td>
            <td colspan="3"> Address </td>
            <td rowspan="2"> Phone Number </td>
            <td rowspan="2"> Skill 1 </td>
            <td rowspan="2"> Skill 2 </td>
         </tr>
         <tr>
            <td> Number </td>
            <td> Street </td>
            <td> Town </td>
         </tr>
         <tr>
            <td> 1235 </td>
            <td> James Bond</td>
            <td> 05 </td>
            <td> Queen's street </td>
            <td> London </td>
            <td> 07876543210 </td>
            <td> James.png </td>
            <td> XML </td>
            <td> C# </td>
         </tr>
         <tr>
            <td> 1236 </td>
            <td> Sherlock Holmes </td>
            <td> 100 </td>
            <td> Prince's street </td>
            <td> London </td>
            <td> 07765432100 </td>
            <td> Sherlock.png </td>
            <td> JavaScript </td>
            <td> Python </td>
         </tr>
      </table>
   </body>
</html>

渲染输出

我没有IE可以在那里尝试,但是Firefox将HTML输出呈现为:

在此处输入图片说明

最后,让我简短地讨论一下,它实际上应该显示为“ Employee”,而不是“ Employe”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM