Xml XSLT firefox uri问题

Xml XSLT firefox uri问题,xml,firefox,xslt,Xml,Firefox,Xslt,我正在使用xml/xsl,并实现了一个链接。该链接正在引用另一个xml文件。使用firefox浏览器,我无法打开链接。 我一直在网上搜索,发现你必须在链接中添加文件:// 这对于绝对路径非常有效,但对于相对路径,它无法解析链接 示例代码: 文件夹D中的file1.xml:/try <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="file:///D:/try/lay

我正在使用xml/xsl,并实现了一个链接。该链接正在引用另一个xml文件。使用firefox浏览器,我无法打开链接。 我一直在网上搜索,发现你必须在链接中添加
文件://

这对于绝对路径非常有效,但对于相对路径,它无法解析链接

示例代码:

文件夹D中的file1.xml:/try

  <?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="file:///D:/try/layout.xsl"?>
   <s1>
     <s>
      <uri>D:/tt.xml</uri>
     </s>
   </s1>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="html" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <xsl:element name="body">
          <xsl:apply-templates select="s1"/>
      </xsl:element>
    </html>
  </xsl:template>


  <xsl:template match="s1">
    <xsl:apply-templates select="s"/>
  </xsl:template>

  <xsl:template match="s">
    <table>
      <tr><th>Uri: </th><td>
        <xsl:element name="a">
          <xsl:attribute name="href"><xsl:value-of select="uri"/></xsl:attribute>
          <div><xsl:value-of select="uri"/></div>
        </xsl:element>
      </td></tr>
    </table>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<s1>
  <s>
    <h1>HELLO</h1>
  </s>
</s1>

D:/tt.xml
文件夹D中的layout.xsl:/try

  <?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="file:///D:/try/layout.xsl"?>
   <s1>
     <s>
      <uri>D:/tt.xml</uri>
     </s>
   </s1>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="html" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <xsl:element name="body">
          <xsl:apply-templates select="s1"/>
      </xsl:element>
    </html>
  </xsl:template>


  <xsl:template match="s1">
    <xsl:apply-templates select="s"/>
  </xsl:template>

  <xsl:template match="s">
    <table>
      <tr><th>Uri: </th><td>
        <xsl:element name="a">
          <xsl:attribute name="href"><xsl:value-of select="uri"/></xsl:attribute>
          <div><xsl:value-of select="uri"/></div>
        </xsl:element>
      </td></tr>
    </table>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<s1>
  <s>
    <h1>HELLO</h1>
  </s>
</s1>

Uri:
文件夹D中的tt.xml:/try

  <?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="file:///D:/try/layout.xsl"?>
   <s1>
     <s>
      <uri>D:/tt.xml</uri>
     </s>
   </s1>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="html" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <xsl:element name="body">
          <xsl:apply-templates select="s1"/>
      </xsl:element>
    </html>
  </xsl:template>


  <xsl:template match="s1">
    <xsl:apply-templates select="s"/>
  </xsl:template>

  <xsl:template match="s">
    <table>
      <tr><th>Uri: </th><td>
        <xsl:element name="a">
          <xsl:attribute name="href"><xsl:value-of select="uri"/></xsl:attribute>
          <div><xsl:value-of select="uri"/></div>
        </xsl:element>
      </td></tr>
    </table>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<s1>
  <s>
    <h1>HELLO</h1>
  </s>
</s1>

你好
如果将file1.xml中的uri
D:/tt.xml
替换为相对路径
tt.xml
,则会正常工作

我想要一个将uri转换为可接受格式的函数。

问候,, Marky

与此同时,我得到了这个:

        <xsl:if test="regexp:match(uri, '^.[^:].*', 'g')">
          <xsl:element name="a">
            <xsl:attribute name="href"><xsl:value-of select="uri"/></xsl:attribute>
            <div><xsl:value-of select="uri"/></div>
          </xsl:element>
        </xsl:if>
        <xsl:if test="regexp:match(uri, '.*:.*', 'g')">
          <xsl:element name="a">
            <xsl:attribute name="href"><xsl:value-of select="concat('file://',uri)"/>        
            </xsl:attribute>
            <div><xsl:value-of select="uri"/></div>
          </xsl:element>
        </xsl:if>


但我认为这不是最好的解决办法。

我不明白问题出在哪里。考虑向测试用例发布一些代码或URL来演示问题。代码>解析uri不是XSLT 1.0的一部分,XSLT 1.0是当前浏览器支持的XSLT版本,因此不要期望该功能在Firefox或其他浏览器中工作。您能举一个应该工作的XML示例吗,但是不起作用?那么您正在用XSLT将XML转换为HTML,而在HTML的相关链接中,Firefox不起作用?在这种情况下,Firefox的错误控制台会说什么?当您使用带有相对URL的HTML文档时,Firefox的行为有什么不同吗?你能在我们可以访问问题的文档上发布一个URL吗?相对URL有效,但对于绝对URL,如果链接类似于“d:/bla.txt”,则会显示“未知协议d”。我将准备一个完整的例子。