XSLT: изменить пространство имен в преобразователе, а не в таблице стилей / удалить префикс пространства имен - PullRequest
2 голосов
/ 01 октября 2009

Я преобразовываю некоторые XML, используя XSLT и Saxon, вот так:

    Source sourceXML = new StreamSource(...);
    Source sourceXSLT = new StreamSource(...);

    System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
    TransformerFactory transFact = TransformerFactory.newInstance();

    Templates cachedXSLT = transFact.newTemplates(sourceXSLT);

    Transformer transformer = cachedXSLT.newTransformer();
    transformer.setOutputProperty("indent", "no");

    transformer.transform(sourceXML, new StreamResult(System.out));

Таблица стилей генерируется с использованием MapForce и часто изменяется. Несмотря на то, что преобразование работает в общем случае, все элементы имеют префикс пространства имен n . Вероятно, это связано со следующей строкой в ​​таблице стилей:

<xsl:namespace-alias stylesheet-prefix="n" result-prefix="#default"/>

Поскольку инструмент MapForce не отображает этот префикс в предварительном просмотре, его, вероятно, очень легко изменить в преобразователе. Может ли кто-нибудь указать мне правильное направление? Или мне нужно выполнить некоторую (ручную) предварительную обработку таблицы стилей, чтобы избавиться от нее?

Урезанная версия таблицы стилей выглядит следующим образом:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n="..." xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:grp="http://www.altova.com/Mapforce/grouping" exclude-result-prefixes="fn grp xs xsi xsl" xmlns="...">
    <xsl:namespace-alias stylesheet-prefix="n" result-prefix="#default"/>
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    ...
    </xsl:template>
</xsl:stylesheet>
...