我想要一个客户端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什么都不做。好像变换以某种方式丢失了一些关于元素的数据。鉴定。
有什么想法吗?感谢。
答案 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。
谢谢,所有。