包含多个名称空间的XML的XSLT

时间:2012-04-20 02:59:02

标签: java xml xslt

我正在研究一个让我有点头疼的XSLT,并且正在寻找一些技巧。我正在努力转换XML,其中一些标签具有名称空间前缀,而其他标签则没有。我正在努力将所有标记转换为一个公共名称空间前缀。

XML示例:

<yes:Books>
   <no:Book>
      <Title>Yes</Title>
      <maybe:Version>1</maybe:Version>
   </no:Book>
</yes:Books>

我想要的是:

<yes:Books>
   <yes:Book>
      <yes:Title>Yes</yes:Title>
      <yes:Version>1</yes:Version>
   </yes:Book>
</yes:Books>

XML输入是几个Web服务的集合,它们返回各种名称空间。我没有问题将它合适地聚合在一起,它正在创建一个我遇到问题的公共前缀命名空间。

最糟糕的情况是,我可以把它们带走,但我确信这不是推荐的。

感谢。

2 个答案:

答案 0 :(得分:2)

此转换允许将所需的最终前缀及其名称空间指定为外部/全局参数。它显示了如何以相同的方式处理属性名称

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pPrefix" select="'yes'"/>
 <xsl:param name="pNamespace" select="'yes'"/>

 <xsl:template match="*">
  <xsl:element name="{$pPrefix}:{local-name()}" namespace="{$pNamespace}">
   <xsl:apply-templates select="node()|@*"/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:attribute name="{$pPrefix}:{local-name()}" namespace="{$pNamespace}">
   <xsl:value-of select="."/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

应用于以下文档(提供的一个具有一个添加的属性以使问题更具挑战性):

<yes:Books xmlns:yes="yes">
    <no:Book xmlns:no="no">
        <Title no:Major="true">Yes</Title>
        <maybe:Version xmlns:maybe="maybe">1</maybe:Version>
    </no:Book>
</yes:Books>

会产生想要的正确结果:

<yes:Books xmlns:yes="yes">
   <yes:Book>
      <yes:Title yes:Major="true">Yes</yes:Title>
      <yes:Version>1</yes:Version>
   </yes:Book>
</yes:Books>

答案 1 :(得分:0)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:custom="c">
    <xsl:template match="/">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*">
        <xsl:element name="custom:{local-name()}" namespace-uri="c">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>
相关问题