删除XML命名空间而忽略根

时间:2016-08-11 14:54:46

标签: xml xslt namespaces

我有一个xml。

<ClinicalDocuments>

<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:axolotl="urn:axolotl-com:pdo">
        <realmCode xmlns="" code="US"/>
        <typeId xmlns="" extension="POCD_HD000040" root="2.16.840.1.113883.1.3"/>
        <templateId xmlns="" root="1.3.6.1.4.1.19376.1.5.3.1"/>
        <templateId xmlns="" root="1.3.6.1.4.1.19376.1.5.3.1.1"/>
        <templateId xmlns="" root="1.3.6.1.4.1.19376.1.5.3.1.1.1"/>
        <templateId xmlns="" root="2.16.840.1.113883.10.20.3"/>
        <templateId xmlns="" root="2.16.840.1.113883.10.20.1"/>
        <templateId xmlns="" root="2.16.840.1.113883.3.88.11.32.1"/>
        <id xmlns="" root="006e50e9-29b5-4ab2-8c0b-202819b39646"/>
blah
blah
</ClinicalDocument>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
blah
blah
.
.
</ClinicalDocument>

</ClinicalDocuments>

的xmlns =&#34;&#34;是压缩主要的xmlns。

我想删除xmlns =&#34;&#34;上的所有其他实例同时保持一个在根节点&#34; ClinicalDocument xmlns =&#34; urn:hl7-org:v3&#34;的xmlns:VOC =&#34;瓮:HL7-ORG:V3 / VOC&#34;的xmlns:=的xsi&#34; HTTP://www.w3.org/2001/XMLSchema-instance"的xmlns:螈=&#34;瓮:螈-COM:PDO&#34;

还有很多其他的xmlns =&#34;&#34;在整个xml中。 请帮忙。

2 个答案:

答案 0 :(得分:1)

您无法直接在XSLT中操作名称空间声明。您应确保结果树中的每个元素都在正确的命名空间中,然后将自动处理命名空间声明。

例如,如果您不希望xmlns=""出现在realmCode元素上,那么您应该确保在同一名称空间中生成realmCode元素它的父元素。这可以通过模板规则来完成,例如:

<xsl:template match="realmCode">
  <xsl:element name="{local-name()}" namespace="urn:hl7-org:v3">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

答案 1 :(得分:0)

只需删除xmlns=""的所有实例。此XML通过验证,xmlns的{​​{1}}不再被覆盖:

<ClinicalDocument>