2016-08-11 126 views
0

我有一个XML。删除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 =“”正在过度检查主要的xmlns。

我想删除xmlns =“”上的所有其他实例,同时将其保留在根节点上“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“

还有许多其他xmlns =”“整个XML。 请帮助。

+1

您的问题不清楚。首先,'ClinicalDocument'不是根节点。接下来,它的子节点处于非命名空间,并且需要'xmlns =“”'decalration来清除。你想把它们移到父母的名字空间吗?这将有效地改变你的XML模式,所以在你做之前请仔细考虑后果。 –

回答

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

非常感谢您的回复。但我想使用与其父级相同的名称空间。那么有没有办法将xmlns =“”变成xmlns =“urn:hl7-org:v3”? –

+0

你似乎没有理解我的答案。不用担心名称空间声明。只需在所需的名称空间中创建元素,并且名称空间声明将自行处理。 –

0

只要删除的xmlns=""所有实例。此XML通过验证和xmlns<ClinicalDocument>将不会被覆盖了:

<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 code="US"/> 
     <typeId extension="POCD_HD000040" root="2.16.840.1.113883.1.3"/> 
     <templateId root="1.3.6.1.4.1.19376.1.5.3.1"/> 
     <templateId root="1.3.6.1.4.1.19376.1.5.3.1.1"/> 
     <templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.1"/> 
     <templateId root="2.16.840.1.113883.10.20.3"/> 
     <templateId root="2.16.840.1.113883.10.20.1"/> 
     <templateId root="2.16.840.1.113883.3.88.11.32.1"/> 
     <id 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> 
+0

但我将有大约80,000这些xml的传入流。所以我们不能想到手动删除。有没有办法让xmlns =“”变成xmlns =“urn:hl7-org:v3”? –