伙计们,
请帮帮我!我只需要在XML的第一个节点中包含名称空间前缀,其他节点必须没有前缀和名称空间。请参见下面的示例。
之前:
<RootNode xmlns="https://xxx/yyy/v1">
<CreatedBy>admin</CreatedBy>
<Task>
<Number>1</Number>
<Status>-1</Status>
<Name>Fechada</Name>
</Task>
</RootNode>
之后:
<ns0:RootNode xmlns:ns0="https://xxx/yyy/v1">
<CreatedBy>admin</CreatedBy>
<Task>
<Number>1</Number>
<Status>-1</Status>
<Name>Fechada</Name>
</Task>
</ns0:RootNode>
如何使用XSL做到这一点?
答案 0 :(得分:0)
您想在这里做两件事。
1)在根元素上添加名称空间前缀。可以使用以下模板完成此操作
<xsl:template match="/*">
<xsl:element name="ns0:{local-name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
2)对于所有其他元素,请创建具有相同名称但没有名称空间的元素。可以通过以下方式完成
<xsl:template match="*/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
将所有内容与身份模板一起处理其他所有内容,可以为您提供以下XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:element name="ns0:{local-name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="*/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>