xslt namspace, связанный с копированием некоторых элементов - PullRequest
0 голосов
/ 22 марта 2011

Итак, у меня есть таблица стилей, которая тратит большую часть своего времени на преобразование элементов из 'namespace a' в пространство имен xhtml.

В одном конкретном случае, однако, я хочу, чтобы входной словарь включал любой элемент xhtml. С точки зрения схемы, я добавил <xs:any namespace="...."/> для пространства имен xhtml.

Похоже:

<btml:html-noscript xmlns="http://www.w3.org/1999/xhtml">
    <div style="display:inline;">
        <img height="1" 
             width="1" 
             style="border-style:none;" 
             alt="" 
             src="http://www.googleadservices.com/pagead/conversion/1070015830/?label=FoKlCKDxiAIQ1sqc_gM&amp;guid=ON&amp;script=0"/>
    </div>
</btml:html-noscript>

Таблица стилей использует xsl:copy-of для копирования дочерних элементов проходного элемента в вывод.

Saxon-B, который я использую (последний выпуск), кажется глупым в отношении пространств имен. Несмотря на то, что целевое пространство имен всего выходного документа является пространством имен xhtml, выходные данные выглядят следующим образом:

<noscript>
    <div xmlns:btml="http://www.basistech.com/2010/btml/"
         xmlns:xhtml="http://www.w3.org/1999/xhtml"
         style="display:inline;">
    <img height="1" 
              width="1" 
              style="border-style:none;" 
              alt="" 
              src="http://www.googleadservices.com/pagead/conversion/1070015830/?label=FoKlCKDxiAIQ1sqc_gM&amp;guid=ON&amp;script=0"></img>
    </div>
</noscript>

Обратите внимание на бессмысленные префиксы вместо того, чтобы просто ставить <div ...>. Обратите внимание, что элемент документа всей компании (html) определяет xmlns="ttp://www.w3.org/1999/xhtml".

Есть ли способ убрать это?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Попробуйте, поможет ли выполнение <xsl:copy-of select="node()" copy-namespaces="no"/> (см. http://www.w3.org/TR/xslt20/#copy-of). Если нет, пожалуйста, опубликуйте полные образцы входных данных XML и таблицу стилей XSLT, позволяющую нам воспроизвести проблему, ваши фрагменты пока не объясняют, где, например, xmlns:xhtml="..." в результате получается фрагмент элемента div.

0 голосов
/ 23 марта 2011

С http://www.w3.org/TR/xml-names/#scoping

Область объявления пространства имен, объявляющего префикс, простирается от начала начального тега, в котором он появляется, до конца соответствующего конечного тега, исключаяобласть действия любых внутренних объявлений с той же частью NSAttName.В случае пустого тега областью действия является сам тег.

Для вашего случая это означает, что URI пространства имен "http://www.basistech.com/2010/btml/" и "http://www.w3.org/1999/xhtml" связаны с btml префиксами xhtmlнаходятся в области действия вашего div элемента без "http://www.w3.org/1999/xhtml" пространства имен по умолчанию.

Конечно, в соответствии с предложением @Martin Honnen answer xsl:copy-of/@copy-namespaces со значением "no" в качестве значенияобласть имен области действия фактически не используется (то есть в этом элементе или в именах его атрибутов).

...