为了账号安全,请及时绑定邮箱和手机立即绑定

从 xml 中删除所有命名空间

从 xml 中删除所有命名空间

萧十郎 2022-11-18 16:47:05
有没有办法从 xml 中删除名称空间(我知道没有任何名称冲突)?目前我正在为每个已知的名称空间执行此操作:s = re.sub(r'(<\/?)md:', r'\1', s)             # remove md: s = re.sub(r'\s+xsi:', ' ', s)                 # remove xsi:但我想知道是否有更通用的东西可以使用。特定 xml 中不允许使用 CDATA。
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以通过从 Python 调用以下 XSLT-1.0 模板来使用 XSLT 方法。它将身份模板与name()将元素的(完整)s转换为local-name()仅 s 的模板相结合。例如,这意味着所有<ns1:abc>元素都将转换<abc>为 。名称空间被省略。


但是,这有多大用处取决于您的用例。它减少了信息量,因此请小心处理。


<?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" indent="yes"/>


    <xsl:template match="node()|@*">   <!-- Identity template copies all nodes (except for elements, which are handled by the other template) -->

        <xsl:copy>

            <xsl:apply-templates select="node()|@*" />

        </xsl:copy>

    </xsl:template>


    <xsl:template match="*">           <!-- Removes all namespaces from all elements -->

        <xsl:element name="{local-name()}">

            <xsl:apply-templates select="node()|@*" />

        </xsl:element>

    </xsl:template>


</xsl:stylesheet>

将其与 XSLT-1.0(或更高版本)框架/处理器一起应用。


查看完整回答
反对 回复 2022-11-18
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号