如果我从XML中删除Schema定义,那么我的XSLT可以正常工作,但我不能让它与定义的Schema一起工作。我知道这个问题已经得到了解答here,但我似乎无法让我的工作。我有以下XML标头:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<Students xmlns="http:/www.example.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com student.xsd">
<Student>
<SSN>622-12-5748</SSN>
<Name>
<First-Name>Alexander</First-Name>
<Last-Name>Mart</Last-Name>
</Name>
<Age>26</Age>
<Institution>UCSF</Institution>
<Email>Alexander@yahoo.com</Email>
</Student>
</Students>
这是我的XSLT文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xsi="http://www.example.com">
<xsl:template match="/">
<html>
<body>
<h2>Student Information</h2>
<table border="1">
<tr bgcolor="yellow">
<th>SSN</th>
<th>First Name</th>
</tr>
<xsl:for-each select="xsi:Students/Student">
<tr>
<td>
<xsl:value-of select="xsi:SSN"/>
</td>
<td>
<xsl:value-of select="xsi:Name/First-Name"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
我犯了什么愚蠢的错误?提前谢谢!
答案 0 :(得分:3)
我犯了什么愚蠢的错误?谢谢 提前!
因为XML文档位于默认命名空间中,并且因为XML文档没有属于“无命名空间”的节点,所以任何XPath表达式中任何未加前缀的元素名称都不会选择任何内容。
您已开始使用带前缀的名称,但不是完全使用。
更改强>:
<xsl:for-each select="xsi:Students/Student">
以强>
<xsl:for-each select="xsi:Students/xsi:Student">
并更改:
<xsl:value-of select="xsi:Name/First-Name"/>
以强>
<xsl:value-of select="xsi:Name/xsi:First-Name"/>
答案 1 :(得分:1)
尝试在for-each select
中使用“xsi:Students / xsi:Student”编辑: 并以您的名字选择:“xsi:Name / xsi:First-Name”