XSL样式表使Firefox无法识别DTD定义的ID

时间:2015-04-24 21:51:21

标签: html xslt

我想要一个客户端XSL转换的文档,其元素可以通过#foo(URL片段)进行targettable(可跳转)。问题是,只要我附加最简单的XSL样式表,Firefox就会停止滚动到元素。这是一个简单的代码:

的test.xml:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
<!DOCTYPE foo [<!ATTLIST bar id ID #REQUIRED>]>
<foo xmlns:html='http://www.w3.org/1999/xhtml' xml:lang='en-GB'>
<html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/>
<bar id='baz'>Baf.</bar>
</foo>

test.xsl:

<xsl:stylesheet version='1.0' xmlns:html='http://www.w3.org/1999/xhtml' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<xsl:copy-of select='.'/>
</xsl:template>
</xsl:stylesheet>

一旦我取消注释样式表行,/ test.xml#baz什么都不做。好像变换以某种方式丢失了一些关于元素的数据。鉴定。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

XSLT / XPath数据模型不包含任何DTD,因此XSLT创建的结果树是没有DTD的输入的副本,因此结果树中没有任何ID属性的定义并且Firefox无法确定属性#some-id引用哪个元素。

通常,如果您在浏览器中使用客户端XSLT,则目标格式为(X)HTML或SVG,或两者的混合,其中id属性是浏览器实现已知的,无需DTD。如果你想转换为浏览器未知的结果格式,那么我不认为有一种方法可以在Firefox / Mozilla中使用DTD作为结果树。我不确定他们是否曾实施xml:id支持,以便您可以使用它而不是定义自己的ID属性。

答案 1 :(得分:1)

Martin Honnen提到的XHTML导致了实验,在此期间我发现将目标元素的命名空间设置为XHTML,xmlns =&#39; http://www.w3.org/1999/xhtml&# 39;,诀窍。它看起来并不干净,但它似乎并不严重,例如,将整个文档类型设置为XHTML&#39; s。所以text.xml现在是:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='test.xsl'?>
<foo xmlns:html='http://www.w3.org/1999/xhtml' xml:lang='en-GB'>
<html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/><html:br/>
<html:bar id='baz'>Baf.</html:bar>
</foo>

我发现也可能是http://xmlplease.com/xhtmlxhtml

谢谢,所有。