gpt4 book ai didi

java - 包含多个 namespace 的 XML 的 XSLT

转载 作者:行者123 更新时间:2023-11-30 09:38:10 27 4
gpt4 key购买 nike

我正在研究一个让我有点头疼的 XSLT,并且正在寻找一些提示。我正在转换一个 XML,其中一些标签具有 namespace 前缀,而其他标签则没有。我正在努力将所有标签转换为一个通用的命名空间前缀。

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 输入是几个返回各种命名空间的网络服务的集合。我没有问题将它适本地聚合在一起,它正在创建一个我遇到问题的公共(public)前缀命名空间。

最坏的情况,我可以用正则表达式将它们去掉,但我确信不推荐这样做。

谢谢。

最佳答案

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

<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>

关于java - 包含多个 namespace 的 XML 的 XSLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10239656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com