具有名称空间的实体在Edge和IE上不起作用

时间:2019-01-04 22:41:43

标签: xml internet-explorer xslt microsoft-edge xml-namespaces

我有一个XML文件及其XSL转换文件:

simple.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="simple.xsl"?>

<!DOCTYPE simple [
  <!ENTITY ie "<expan>id est</expan>">
]>

<text xmlns="http://www.tei-c.org/ns/1.0">
  I am happy &ie; I am not upset.
</text>

simple.xsl

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:n="http://www.tei-c.org/ns/1.0"
>
  <xsl:template match="/">
    <xsl:apply-templates select="//n:text" />
  </xsl:template>

  <xsl:template match="n:text">
    <html> 
      <body>
        <xsl:apply-templates />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="n:expan">
    <span style="color: red;"><xsl:apply-templates /></span>
  </xsl:template>
</xsl:stylesheet>

当我在Firefox上打开XML文件时,跨度已正确生成:

enter image description here

但是在Edge和Internet Explorer上,没有应用n:expan模板,因此id est不在范围内,也不用红色书写:

Edge

当我删除名称空间和所有n:前缀时,它在Edge和IE上运行良好。另外,当我删除ie实体并直接写I am happy <expan>id est</expan> I am not upset.时,它在两种浏览器上都可以工作。

如何使它同时适用于实体和名称空间?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

显然,不同的处理器对expan元素属于哪个名称空间有不同的看法。我在自己的测试中看到,Saxon和Xalan将其放在其父text的命名空间中,而libxslt认为它在无命名空间中。

  

如何使它同时适用于实体和名称空间?

怎么样:

<xsl:template match="expan | n:expan">