2015-04-24 3 views
1

Я хочу, чтобы XSL-преобразованный документ на стороне клиента с элементами targettable (переходим к) с помощью #foo (фрагменты URL-адреса). Проблема в том, что, как только я приложу простейшую таблицу стилей XSL, Firefox перестает прокручивать элементы. Вот простой код:Таблицы стилей XSL не позволяют Firefox распознавать идентификаторы, определенные DTD.

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

У меня были те же проблемы с IE Explorer (не спрашивайте!). Мне будет интересно узнать, может ли кто-нибудь объяснить и помочь нам исправить это. Удачи! – shellter

ответ

2

Хорошо, что модель данных XSLT/XPath не содержит DTD и, следовательно, ваше дерево результатов, созданное XSLT, является копией ввода без DTD, поэтому в результирующем дереве нет определения каких-либо ID атрибутов, а Firefox нет способа установить, к какому элементу относится атрибут #some-id.

Обычно, если вы используете клиентский XSLT в браузере, целевой формат - это (X) HTML или SVG или сочетание обоих, где атрибуты id известны при реализации браузера без необходимости использования DTD. Если вы хотите преобразовать в формат результата, неизвестный браузеру, я не думаю, что есть способ использовать DTD для дерева результатов в Firefox/Mozilla. И я не уверен, что они когда-либо реализовали поддержку xml:id, чтобы вы могли использовать это, вместо того, чтобы определять свои собственные атрибуты ID.

1

Упоминание Мартина Хоннен о XHTML привело к экспериментированию, в ходе которого я узнал, что установка пространства имен целевого элемента в XHTML, xmlns = 'http://www.w3.org/1999/xhtml', делает трюк. Это не кажется очень чистым, но это не кажется таким серьезным, как, например, установка всего doctype на XHTML. Так 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 я нашел.

Спасибо, все.

Смежные вопросы