ルート ノードを変更するために必要な XML ドキュメントがありました。私がネットからかき集めたわずかな知識で、XML の子ノードに新しい xmlns 属性が含まれていることを除けば、私が望むものと同じように見えるものを得ることができました。変換を適用した XML は次のようになります。
<gmd:MD_Metadata xmlns="http://www.isotc211.org/2005/gmd"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gmi="http://www.isotc211.org/2005/gmi"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmx="http://www.isotc211.org/2005/gmx"
xmlns:gsr="http://www.isotc211.org/2005/gsr"
xmlns:gss="http://www.isotc211.org/2005/gss"
xmlns:gts="http://www.isotc211.org/2005/gts"
xmlns:srv="http://www.isotc211.org/2005/srv"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.isotc211.org/2005/gmd
http://www.ngdc.noaa.gov/metadata/published/xsd/schema/gmd/gmd.xsd">
<gmd:language>
<gmd:LanguageCode
codeList="http://www.loc.gov/standards/iso639-2/php/code_list.php"
codeListValue="eng" codeSpace="ISO639-2"
>eng</gmd:LanguageCode>
</gmd:language>
......
</gmd:MD_Metadata>
私の XSLT は次のようになります。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmi="http://www.isotc211.org/2005/gmi">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<gmi:MI_Metadata
xmlns="http://www.isotc211.org/2005/gmi"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gmi="http://www.isotc211.org/2005/gmi"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmx="http://www.isotc211.org/2005/gmx"
xmlns:gsr="http://www.isotc211.org/2005/gsr"
xmlns:gss="http://www.isotc211.org/2005/gss"
xmlns:gts="http://www.isotc211.org/2005/gts"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://www.isotc211.org/2005/srv"
xsi:schemaLocation="http://www.isotc211.org/2005/gmi
http://www.ngdc.noaa.gov/metadata/published/xsd/schema.xsd" >
<xsl:for-each select="/*/node()|@*">
<xsl:copy-of select="." />
</xsl:for-each>
</gmi:MI_Metadata>
</xsl:template>
</xsl:stylesheet>
出力は次のようになります。
<gmi:MI_Metadata xmlns="http://www.isotc211.org/2005/gmi"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gmi="http://www.isotc211.org/2005/gmi"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmx="http://www.isotc211.org/2005/gmx"
xmlns:gsr="http://www.isotc211.org/2005/gsr"
xmlns:gss="http://www.isotc211.org/2005/gss"
xmlns:gts="http://www.isotc211.org/2005/gts"
xmlns:srv="http://www.isotc211.org/2005/srv"
xmlns:v1="http://www.isotc211.org/2005/gmd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.isotc211.org/2005/gmi
http://www.ngdc.noaa.gov/metadata/published/xsd/schema.xsd">
<gmd:language xmlns="http://www.isotc211.org/2005/gmd">
<gmd:LanguageCode
codeList="http://www.loc.gov/standards/iso639-2/php/code_list.php"
codeListValue="eng" codeSpace="ISO639-2"
>eng</gmd:LanguageCode>
</gmd:language>
.......
</gmi:MI_Metadata>
子ノードの出力にxmlns="http://www.isotc211.org/2005/gmd"が含まれないようにしたかったのですが、それを実現する方法はありますか? xslt の一部を次のように変更すると、次のことに気付きました。
<xsl:template match="/">
<gmi:MI_Metadata xmlns="http://www.isotc211.org/2005/gmd" ....
xmlns は消えますが、ヘッダー/ルート ノードは、クライアントが出力で望んでいるものではありません! だから、自分に何ができるのかわからなかった。あなたの洞察は非常に高く評価されます、ありがとう。