如何在DataWeave中移除XML命名空间(保留属性等内容)
移除XML根元素的命名空间前缀(保留其他内容)
方法一:正则替换(适用于结构简单的场景)
针对你给出的XML结构,直接匹配根元素的开头和结尾标签,移除ds2:前缀即可。以Python为例:
import re input_xml = '''<ds2:note xmlns:ds2="http://sampleSchame" code= "12332" Id="333-333-333" set="2" St="2024-09-11T11:23:55" sq="2"> <customer> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </customer> </ds2:note>''' # 替换根元素的命名空间前缀 output_xml = re.sub(r'</?ds2:note>', lambda match: match.group(0).replace('ds2:', ''), input_xml) print(output_xml)
注意:该方法仅适合根元素明确、无嵌套同名元素的简单XML,复杂场景建议用专业解析库。
方法二:XML解析库(通用可靠方案)
使用专业XML工具处理更稳妥,避免正则的局限性。以Python的lxml库为例:
from lxml import etree input_xml = '''<ds2:note xmlns:ds2="http://sampleSchame" code= "12332" Id="333-333-333" set="2" St="2024-09-11T11:23:55" sq="2"> <customer> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </customer> </ds2:note>''' # 解析XML内容 root = etree.fromstring(input_xml.encode('utf-8')) # 移除根元素的命名空间前缀 root.tag = root.tag.split('}')[-1] # 输出处理后的XML(保留格式) output_xml = etree.tostring(root, encoding='unicode', pretty_print=True) print(output_xml)
此方法会自动保留所有属性、子元素及命名空间声明,适用于各类XML结构。
内容的提问来源于stack exchange,提问作者Zak01
相关产品推荐
相关产品推荐

