账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    lxml怎么删除namespaces
    49
    0

    我读取一个xhtml

    <?xml version='1.0' encoding='utf-8'?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <meta name="calibre:cover" content="true"/>
            <title>Cover</title>
            <style type="text/css" title="override_css">
                @page {padding: 0pt; margin:0pt}
                body { text-align: center; padding:0pt; margin: 0pt; }
            </style>
        </head>
        <body>
            <div>
                <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100%" height="100%" viewBox="0 0 200 266" preserveAspectRatio="none">
                    <image width="200" height="266" xlink:href="cover1.jpeg"/>
                </svg>
            </div>
        </body>
    </html>

    把一个xhtml里的body里的保存到新的html

    from lxml import etree
    with open("test.xhtml", 'r', encoding='utf8') as html:
        tree = etree.parse(html)
        body = tree.find(
            '//xmlns:body',
             namespaces={'xmlns': 'http://www.w3.org/1999/xhtml'}
        )
        nsmap = body.nsmap
        # 这里不加nsmap所有标签都会有namespaces
        page_xml = etree.Element('div', nsmap=nsmap)
        for child in body.iterchildren():
            page_xml.append(child)
        etree.ElementTree(page_xml).write(
            "new.html",
            pretty_print=True,
            encoding='utf-8',
            method='html'
        )

    最后转换出来new.html多了一个xmlns,问题来了怎么去掉呢?

    <div xmlns="http://www.w3.org/1999/xhtml">
        <div>
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100%" height="100%" viewBox="0 0 200 266" preserveAspectRatio="none">
                <image width="200" height="266" xlink:href="cover1.jpeg"/>
            </svg>
        </div>
    </div>
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 烈性的风 普通会员 1楼

      在使用lxml库时,可以使用register_namespace函数来注册新的namespace,然后使用register namespace函数来删除某个namespace。以下是一个例子:

      ```python from lxml import etree

      创建一个新的namespace

      ns = etree.register_namespace("http://example.com", "http://example.org")

      创建一个元素并注册新的namespace

      root = etree.Element("root") root.set("http://example.com","http://example.org")

      删除注册的namespace

      etree.unregister_namespace("http://example.com") ```

      在这个例子中,我们首先创建了一个新的namespace,然后创建了一个元素并注册了这个namespace。然后,我们使用unregister_namespace函数删除了这个namespace。

      注意,unregister_namespace函数会清空该namespace的所有元素和关系,所以在使用时需要小心。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部