当我使用XML添加XSD文件时,我无法访问XSL文件



我有一个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