我有以下 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>
Run Code Online (Sandbox Code Playgroud)
但是,这不会删除 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>
Run Code Online (Sandbox Code Playgroud)
这是一个完整的转换,产生了想要的结果:
<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>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于以下 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>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
<Message xmlns="http://www.theNEWnamespace.com"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10501 次 |
| 最近记录: |