我有一個需要更改根節點的XML文檔。用我可以刮掉網絡的小知識,我可以將事情看起來像我想要的,除了我的XML的子節點具有新的xmlns屬性。我是申請改造的XML看起來像:避免在應用XSLT時在xml響應中添加xmlns屬性
<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消失但隨後頁眉/根節點不是客戶想要在輸出什麼!所以我不確定我能做什麼。非常感謝您的見解,謝謝。
謝謝torazaburo和@C。 M. Sperberg-McQuee爲您的迴應。我應用了torazaburo提供的xslt片段,並且能夠擺脫子節點中的xmlns屬性。我確實看到xlink:type =「simple」附屬於一些子元素,但我想我可以通過Google來處理它。再次感謝。 –