XML新手求助:XSL无法关联XML,数据无法按表格展示
XML与XSL关联问题排查及修正
问题描述
我是XML新手,想把客户端数据以表格形式展示。XML经验证无错误,但无法关联XSL文档,验证XSL时持续提示XML未连接。
核心问题及修正方案
1. 文件路径与命名
确保XML文件和hw3.xsl文件放在同一目录,且XSL文件名完全匹配XML中<?xml-stylesheet>指令里的href值。
2. XSL节点选择错误(关键问题)
你的XSL里存在多处节点名称不匹配XML结构的问题:
- XML中邮箱节点是
<E-mail>,XSL里误写为Email - XML中账户总额节点是
<Account_Total>,XSL里误写为Account Total - 直接读取
<Name>节点会包含换行和空白,需要拼接<First>和<Last>的值 - 表头背景色的属性值前有多余空格,会导致样式失效
3. 浏览器打开方式限制
部分浏览器(如Chrome)直接打开本地XML文件会因跨域限制无法加载XSL,建议:
- 使用Firefox浏览器打开
- 搭建本地HTTP服务器(如用Python的
python -m http.server)后访问文件
修正后的代码
XML文件(无需改动,确认路径即可)
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="hw3.xsl"?> <!-- Simple XML file with no CSS --> <Accounts> <Client ID="CS5355"> <Name> <First>Grant</First> <Last>Wu</Last> </Name> <Address> <Street>55 Hawking Street</Street> <City>Delton</City> <State>MN</State> <Zip>89011</Zip> </Address> <Phone>(532) 555-9939</Phone> <E-mail>gwu@brockton.com</E-mail> <Account_Total>60000</Account_Total> </Client> <Client ID="CS5108"> <Name> <First>Cynthia</First> <Last>Browne</Last> </Name> <Address> <Street>71 Circuit Ct.</Street> <City>Wheaton</City> <State>MN</State> <Zip>89321</Zip> </Address> <Phone>(532) 555-3813</Phone> <E-mail>cynthia@brownes.com</E-mail> <Account_Total>80000 </Account_Total> </Client> <Client ID="CS5331"> <Name> <First>Robert</First> <Last>Olson</Last> </Name> <Address> <Street>5133 Oak Street</Street> <City>Delton</City> <State>MN</State> <Zip>89011</Zip> </Address> <Phone>(532) 555-8981</Phone> <E-mail>rolson@delisp.net</E-mail> <Account_Total>25000</Account_Total> </Client> <Client ID="CS5771"> <Name> <First>Steve</First> <Last>Bones</Last> </Name> <Address> <Street>900 Lawton Street</Street> <City>Wheaton</City> <State>MN</State> <Zip>89211</Zip> </Address> <Phone>(533) 555-5434</Phone> <E-mail>Sbone@mail.com</E-mail> <Account_Total>105000</Account_Total> </Client> <Client ID="CS5981"> <Name> <First>Jim</First> <Last>Wheatley</Last> </Name> <Address> <Street>Hawkes Lane</Street> <City>Delton</City> <State>MN</State> <Zip>89211</Zip> </Address> <Phone>(542) 555-8828</Phone> <E-mail>jim_wheatley@kyu.edu</E-mail> <Account_Total>83000</Account_Total> </Client> <Client ID="CS5308"> <Name> <First>Cindy</First> <Last>Kaufmann</Last> </Name> <Address> <Street>31 Alice Avenue</Street> <City>Delton</City> <State>MN</State> <Zip>89011</Zip> </Address> <Phone>(532) 555-7212</Phone> <E-mail>cka@ispnet.net</E-mail> <Account_Total>125000</Account_Total> </Client> <Client ID="CS5250"> <Name> <First>Lee</First> <Last>Hayes</Last> </Name> <Address> <Street>451 Unwin Ct.</Street> <City>Jasper</City> <State>MN</State> <Zip>89381</Zip> </Address> <Phone>(534) 555-9082</Phone> <E-mail>leehayes@clarion.net</E-mail> <Account_Total>118000</Account_Total> </Client> <Client ID="CS5981"> <Name> <First>Jane</First> <Last>Wilson</Last> </Name> <Address> <Street>87 Hilltop Drive</Street> <City>Jasper</City> <State>MN</State> <Zip>89381</Zip> </Address> <Phone>(534) 555-7493</Phone> <E-mail>jwilson@cls.net</E-mail> <Account_Total>95000</Account_Total> </Client> </Accounts>
修正后的XSL文件(hw3.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> <h1>List of Clients</h1> <table border="1"> <tr bgcolor="#0000FF"> <th>Name</th> <th>Phone</th> <th>Email</th> <th>Account Total</th> </tr> <xsl:for-each select="Accounts/Client"> <tr> <td><xsl:value-of select="Name/First"/> <xsl:value-of select="Name/Last"/></td> <td><xsl:value-of select="Phone"/></td> <td><xsl:value-of select="E-mail"/></td> <td><xsl:value-of select="Account_Total"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者XyberFox
相关产品推荐
相关产品推荐

