XSLT:在变换器中更改名称空间,而不是在样式表/删除名称空间前缀中

时间:2009-10-01 09:41:15

标签: java xslt xml-namespaces saxon

我正在使用XSLT和Saxon转换一些XML,如下所示:

    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>

0 个答案:

没有答案