我有以下XML模式:
<?xml version="1.0" encoding="UTF-8"?>
<xrm:plugin source-default-namespace="" cible-encodage="ISO-8859-1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.moss.fr/2011/connecteur_xrm testplugin.xsd" xmlns:tech="http://www.moss.fr/2011/moteur-xrm" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo" xmlns:attribut="http://www.moss.fr/2012/attribut" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mcd="urn:SCCOA-schemaInfo" xmlns:xrm="http://www.moss.fr/2011/connecteur_xrm" xmlns:variable="http://www.moss.fr/2012/variable" xmlns:doc="http://www.moss.fr/2011/documentation" xmlns:mtf2xsd="http://www.moss.fr/2010/mtf2xsd" xmlns:conv="http://www.moss.fr2010/conversion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SBEGestionZonesAeriennesSYSCA="urn:SBEGestionZonesAeriennesSYSCA-schema" xmlns:info="http://www.moss.fr/2011/information" xmlns="urn:SBEGestionZonesAeriennesSYSCA-schema">
<xrm:mapping occurs="xrm:mapping">
<SBEGestionZonesAeriennesSYSCA xmlns=""
info:obligatoire="true"
occurs="/grappe"
info:contexte="/grappe">
</SBEGestionZonesAeriennesSYSCA>
</xrm:mapping>
</xrm:plugin>
元素SBEGestionZonesAeriennesSYSCA
在命名空间"urn:SBEGestionZonesAeriennesSYSCA-schema"
中,那么我只需要删除xmlns=" "
。
我尝试了XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[namespace-uri()='']">
<xsl:element name="{local-name(.)}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我认为XSLT将使用SBEGestionZonesAeriennesSYSCA
中的namespace-uri,但是它什么也没有改变。我需要找到一种通常删除此xmlns = " "
的方法(我有很多带有mapping
的XML文档,其中包含此“属性”,这会导致需要使用xsd进行验证)。
在这里您可以找到其他具有相同问题但名称空间不同的XML:
<?xml version="1.0" encoding="UTF-8"?>
<xrm:plugin xmlns:doc="http://www.moss.fr/2011/documentation"
xmlns:info="http://www.moss.fr/2011/information"
xmlns:xrm="http://www.moss.fr/2011/connecteur_xrm"
xmlns:attribut="http://www.moss.fr/2012/attribut"
xmlns:variable="http://www.moss.fr/2012/variable"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tech="http://www.moss.fr/2011/moteur-xrm"
xmlns:conv="http://www.moss.fr2010/conversion"
xmlns:SCCOAMCD="urn:SCCOA-schemaInfo"
xmlns:mcd="urn:SCCOA-schemaInfo"
xmlns="urn:SBEPlanDeVolSYSCA-schema"
xmlns:SBEPlanDeVolSYSCA="urn:SBEPlanDeVolSYSCA-schema"
xmlns:mtf2xsd="http://www.moss.fr/2010/mtf2xsd"
source-default-namespace=""
cible-encodage="ISO-8859-1">
<xrm:mapping>
<SBEPlanDeVolSYSCA xmlns=""
info:obligatoire="true"
info:est-codage="true"
occurs="/grappe[ LieuOaci/aCodeOaci = $Codes_OACI_A_Traiter ]"
doc:description="On filtre les PDV qui ne concernent pas des plateformes définies en fichier de configuration"
param="Codes_OACI_A_Traiter"
info:contexte="/grappe[ LieuOaci/aCodeOaci = $Codes_OACI_A_Traiter ]">
</SBEPlanDeVolSYSCA>
</xrm:mapping>
</xrm:plugin>
答案 0 :(得分:1)
您的XML显示了此内容...
<SBEGestionZonesAeriennesSYSCA xmlns=""
这意味着SBEGestionZonesAeriennesSYSCA
不在命名空间中。当前不在SBEGestionZonesAeriennesSYSCA
中。 xmlns=""
覆盖了父元素上的默认声明。
这不是删除xmlns=""
的情况,因为xmlns
不是普通属性,而是名称空间声明。您实际上想将SBEGestionZonesAeriennesSYSCA
从无名称空间移至另一名称空间。
您可以通过执行以下操作简单地完成此操作...
<xsl:element name="{local-name(.)}" namespace="urn:SBEGestionZonesAeriennesSYSCA-schema">
编辑:如果默认名称空间未知,则可以尝试从父元素获取默认名称空间
<xsl:element name="{local-name(.)}" namespace="{parent::*/namespace::*[name() = '']}">
但是,例如,如果您在SBEGestionZonesAeriennesSYSCA
下有子元素,则该结果将无法得到正确的结果,该子元素也需要移动。在这种情况下,请尝试以下方法查找具有默认名称空间不为空的第一个祖先:
<xsl:element name="{local-name(.)}" namespace="{ancestor::*[namespace::*[name() = '' and . != '']][1]/namespace::*[name() = '']}">