मुझे पता है कि यह बहुत पुराना है, लेकिन मैंने इसे आज देखा और उस दर्द को याद किया जिसे मैंने नामित एक्सएमएल से निपटने का प्रयास किया था। मेरा समाधान एक्सएसएलटी ट्रांसफॉर्म के साथ नेमस्पेस को अलग करना और इसे सादे पुराने एक्सएमएल के रूप में संसाधित करना था। मैं यह करने के लिए उपयोग किया जाने वाला कार्य है:
function remove_namespace( i_xml in xmltype )
return xmltype
is
v_xml xmltype default i_xml;
v_xsl varchar2(32767);
begin
v_xsl := '<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="*">
<!-- remove element prefix (if any) -->
<xsl:element name="{local-name()}">
<!-- process attributes -->
<xsl:for-each select="@*">
<!-- remove attribute prefix (if any) -->
<!-- this if filters out any xmlns="" atts that have no
namespace prefix in the xml -->
<xsl:if test="(local-name() != ''xmlns'')">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>';
return v_xml.transform(xmltype(v_xsl));
end;