Python 如何在转储时删除ns0标记

Python 如何在转储时删除ns0标记,python,xml,python-3.x,elementtree,Python,Xml,Python 3.x,Elementtree,我曾尝试使用lxmliterparse解析该文件,因为实际的文件会很大。我有以下代码: import xml.etree.cElementTree as etree filename = r'D:\test\Books.xml' context = iter(etree.iterparse(filename, events=('start', 'end'))) _, root = next(context) for event, elem in context: if event ==

我曾尝试使用lxml
iterparse
解析该文件,因为实际的文件会很大。我有以下代码:

import xml.etree.cElementTree as etree
filename = r'D:\test\Books.xml'
context = iter(etree.iterparse(filename, events=('start', 'end')))
_, root = next(context)
for event, elem in context:
    if event == 'start' and elem.tag == '{http://www.book.org/Book-19200/biblography}Book':
        print(etree.dump(elem))
        root.clear()
我的XML如下所示:

<Books>
    <Book xmlns="http://www.book.org/Book-19200/biblography"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    ISBN="519292296"
    xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd 
    http://www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <Detail ID="67">
            <BookName>Code Complete 2</BookName>
            <Author>Steve McConnell</Author>
            <Pages>960</Pages>
            <ISBN>0735619670</ISBN>        
            <BookName>Application Architecture Guide 2</BookName>
            <Author>Microsoft Team</Author>
            <Pages>496</Pages>
            <ISBN>073562710X</ISBN>
        </Detail>
    </Book>
    <Book xmlns="http://www.book.org/Book-19200/biblography"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    ISBN="519292296"
    xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd 
    http://www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <Detail ID="87">
            <BookName>Rocking Python</BookName>
            <Author>Guido Rossum</Author>
            <Pages>960</Pages>
            <ISBN>0735619690</ISBN>
            <BookName>Python Rocks</BookName>
            <Author>Microsoft Team</Author>
            <Pages>496</Pages>
            <ISBN>073562710X</ISBN>
        </Detail>
    </Book>
</Books>
<ns0:Book xmlns:ns0="http://www.book.org/Book-19200/biblography" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
ance" ISBN="519292296" xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd      http:/
www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <ns0:Detail ID="67">
            <ns0:BookName>Code Complete 2</ns0:BookName>
            <ns0:Author>Steve McConnell</ns0:Author>
            <ns0:Pages>960</ns0:Pages>
            <ns0:ISBN>0735619670</ns0:ISBN>
            <ns0:BookName>Application Architecture Guide 2</ns0:BookName>
            <ns0:Author>Microsoft Team</ns0:Author>
            <ns0:Pages>496</ns0:Pages>
            <ns0:ISBN>073562710X</ns0:ISBN>
        </ns0:Detail>
    </ns0:Book>

代码完成2
史蒂夫·迈克康奈尔
960
0735619670
应用程序架构指南2
微软团队
496
073562710X
摇摆巨蟒
吉多罗森
960
0735619690
巨蟒岩
微软团队
496
073562710X
运行上述命令会产生如下结果:

<Books>
    <Book xmlns="http://www.book.org/Book-19200/biblography"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    ISBN="519292296"
    xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd 
    http://www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <Detail ID="67">
            <BookName>Code Complete 2</BookName>
            <Author>Steve McConnell</Author>
            <Pages>960</Pages>
            <ISBN>0735619670</ISBN>        
            <BookName>Application Architecture Guide 2</BookName>
            <Author>Microsoft Team</Author>
            <Pages>496</Pages>
            <ISBN>073562710X</ISBN>
        </Detail>
    </Book>
    <Book xmlns="http://www.book.org/Book-19200/biblography"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    ISBN="519292296"
    xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd 
    http://www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <Detail ID="87">
            <BookName>Rocking Python</BookName>
            <Author>Guido Rossum</Author>
            <Pages>960</Pages>
            <ISBN>0735619690</ISBN>
            <BookName>Python Rocks</BookName>
            <Author>Microsoft Team</Author>
            <Pages>496</Pages>
            <ISBN>073562710X</ISBN>
        </Detail>
    </Book>
</Books>
<ns0:Book xmlns:ns0="http://www.book.org/Book-19200/biblography" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
ance" ISBN="519292296" xsi:schemaLocation="http://www.book.org/Book-19200/biblography ../../book.xsd      http:/
www.w3.org/2000/12/xmldsig# ../../xmldsig-core-schema.xsd">
        <ns0:Detail ID="67">
            <ns0:BookName>Code Complete 2</ns0:BookName>
            <ns0:Author>Steve McConnell</ns0:Author>
            <ns0:Pages>960</ns0:Pages>
            <ns0:ISBN>0735619670</ns0:ISBN>
            <ns0:BookName>Application Architecture Guide 2</ns0:BookName>
            <ns0:Author>Microsoft Team</ns0:Author>
            <ns0:Pages>496</ns0:Pages>
            <ns0:ISBN>073562710X</ns0:ISBN>
        </ns0:Detail>
    </ns0:Book>

代码完成2
史蒂夫·迈克康奈尔
960
0735619670
应用程序架构指南2
微软团队
496
073562710X
如何确保打印不带ns0前缀的xml片段?我正在使用Python 3。

添加

etree.register_namespace("", "http://www.book.org/Book-19200/biblography")
到您的程序。此函数注册用于序列化的命名空间前缀(在本例中,它表示没有前缀)


参考资料:

谢谢mzjn,很多人都在为ITI苦苦挣扎,这是一个很烦人的字典——我碰巧有多个名称空间用于xml的不同部分(XSD相互导入),虽然我可以将ns0注册为“”,但是,我无法注册其余部分,请将其替换为stringThis引发
值错误:无效的标记名“”
@Sumit:如果需要帮助,请提出新问题。@mzjn我会的。我想这是特定于内置etree库的,而我正在使用lxml,所以可能是这样。