我想从拥有它的所有元素中删除具有特定值的命名空间。我正在为它寻找XSLT转换
如下所示,我需要从包含它的元素中删除 xmlns =“NS_647”
输入XML
<COSR xmlns="TEST_NS1" >
<ORM_O01.PATIENT xmlns="NS_647" >
<PID>
<PID.1>1</PID.1>
</PID>
</ORM_O01.PATIENT>
</COSR>
输出
<COSR xmlns="TEST_NS1" >
<ORM_O01.PATIENT >
<PID>
<PID.1>1</PID.1>
</PID>
</ORM_O01.PATIENT>
</COSR>
答案 0 :(得分:4)
XSLT在XDM数据模型描述的节点树上运行,而不是在原始词汇XML上运行。在输入的XDM树表示中,xmlns="NS_647"
不作为属性节点出现。相反,名称空间声明有两个效果:
因此,您在转换中实际要做的是将相关元素更改为名称空间"TEST_NS1"
而不是"NS_647"
。您可以使用模板规则实现此目的:
<xsl:template match="*[namespace-uri()='NS_647']">
<xsl:element name="{local-name(.)}" namespace="TEST_NS1">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
答案 1 :(得分:0)
试试这个xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>