我有一个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文件时,跨度已正确生成:
但是在Edge和Internet Explorer上,没有应用n:expan
模板,因此id est
不在范围内,也不用红色书写:
当我删除名称空间和所有n:
前缀时,它在Edge和IE上运行良好。另外,当我删除ie
实体并直接写I am happy <expan>id est</expan> I am not upset.
时,它在两种浏览器上都可以工作。
如何使它同时适用于实体和名称空间?
谢谢您的帮助。
答案 0 :(得分:2)
显然,不同的处理器对expan
元素属于哪个名称空间有不同的看法。我在自己的测试中看到,Saxon和Xalan将其放在其父text
的命名空间中,而libxslt认为它在无命名空间中。
如何使它同时适用于实体和名称空间?
怎么样:
<xsl:template match="expan | n:expan">