gpt4 book ai didi

xml - XSLT 删除一些属性

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:30 24 4
gpt4 key购买 nike

我有以下 XML,它可以以任何一种形式出现在我的 XML 文档中:

<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns=http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Message xmlns="http://www.thenamespace.com">

我需要的输出是:

<Message xmlns="http://www.theNEWnamespace.com">

我目前有这个模板来处理两种 xml 可能性的较短版本:

<xsl:template match="*">
<xsl:element name="{name()}" namespace="http://www.theNEWnamespace.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

但是,这不会删除 xml 的 SchemeLocation 或 xmlns:xsi 部分(如果它们存在的话)。

我将如何调整上述内容以处理这两种可能性。

干杯,

编辑:XML 结构:

<?xml version="1.0" encoding="utf-8"?>
<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns="http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<Info></Info>
</Header>
</Message>

最佳答案

这是一个产生所需结果的完整转换:

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

<xsl:template match="x:Message">
<xsl:element name="{name()}" namespace="http://www.theNEWnamespace.com">
<xsl:copy-of select="@*[not(name() = 'xsi:SchemaLocation')]"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时(未提供!):

<t>
<Message
xsi:SchemaLocation="http://www.location.com StructureFile.xsd"
xmlns="http://www.thenamespace.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</t>

产生了想要的、正确的结果:

<Message xmlns="http://www.theNEWnamespace.com"/>

关于xml - XSLT 删除一些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226463/

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