我有一个XML文件,我可以使用XSL文件访问数据。但是,当我将XSD添加到XML文件时,我无法使用XSL文件。请帮助我
<updateClient
xsi:schemaLocation=" file://updateClient.xsd"
xmlns="http://"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileHeader>
<messageType version="100">
<recordTp>722</recordTp>
</messageType>
<sendingCompany>some</sendingCompany>
<processDate>2018-02-13</processDate>
<recordCount>10</recordCount>
</fileHeader>
</updateClient>
我的XSL文件
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://localhost" exclude-result-prefixes="x" >
<xsl:template match="/">
<html>
<body>
<h2>My Collection</h2>
< table>
<tr>
<xsl:for-each select="updateClient/fileHeader/messageType">
<td> <p>RecordType :<xsl:value-of select="recordTp" /></p> </td>
</xsl:for-each>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
您的输入XML位于http://
名称空间中。您在XSL文件中的XPATH表达式没有名称空间前缀,因此他们在默认名称空间中寻找元素。
如果您可以使用XPath 2.0,则可以使用´XPath-Default = namespace´属性,即:
<xsl:stylesheet version="2.0" xpath-default-namespace="http://" ...>
在xpath 1.0中,您可以做这样的事情:
<xsl:for-each select="/ns1:updateClient/ns1:fileHeader/ns1:messageType" xmlns:ns1="http://">
或者,您可以在输入XML中删除名称空间声明,然后使用xsi:noNamespaceSchemaLocation="file://updateClient.xsd"
代替xsi:schemaLocation
。