Saxon Transformerfactory помещает ненужные xmlns: xsd = "http://www.w3.org/2001/XMLSchema" в выходные данные трансформатора - PullRequest
1 голос
/ 10 марта 2011

Я использую фабрику преобразователей Sax для выполнения преобразования XSLT для большого набора файлов xsd, поэтому конкретная строка xslt выглядит следующим образом.

<xsl:result-document href="{$fileName}" 
                     doctype-public="-//OASIS//DTD DITA Reference//EN" 
                     doctype-system="reference.dtd">
    <reference id="{$guid}" xml:lang="EN-US" outputclass="landscape">
        <title>
            <xsl:value-of select="$typeName"/>
        </title>
        <abstract>....

ссылочный тег является корнем документа, но у результата есть нежелательный атрибут xmlns: xsd, показанный ниже.

...<reference xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       id="RANDOM-ID".....

этот дополнительный атрибут вызывает проблемы с анализатором, которыйиспользует преобразованный XML.это проблема с XSLT или SAXON API, как я могу избежать этого?

1 Ответ

2 голосов
/ 10 марта 2011

По умолчанию преобразование xsl скопирует пространства имен, определенные в таблице стилей, в выходной документ. Вы можете исключить это пространство имен, указав exclude-result-prefixes для элемента xsl:stylesheet или reference со значением "xsd".

Вот соответствующая часть xslt sepcification :

Созданный узел элемента также будет иметь копию узлов пространства имен, которые присутствовали на узле элемента в таблице стилей (...)

URI пространства имен обозначается как исключенное пространство имен с использованием атрибута exclude-result-prefixes в элементе xsl: stylesheet или атрибута xsl: exclude-result-prefixes в буквальном элементе result. Значением обоих этих атрибутов является список префиксов пространства имен, разделенных пробелами.

...