我在发布关于xml命名空间之前读了多个线程,但是仍然遇到在文件中编写没有命名空间的子xml元素的问题。
即使我在解析/读取文件之前提到注册的命名空间为空," findall"没有返回任何元素。我验证了代码和xml文件中存在的命名空间,也打印在root.tag。
上如果我从标记中完全删除xmlns,代码正在运行,但我想读取没有命名空间的xml文件并写入没有命名空间的文件。能不能让我知道我在这里犯的错误?
这是我试过的代码。
import xml.etree.ElementTree as ET
ET.register_namespace("","urn:iso:2012.tech.xsd.001.04") ##Making sure parse a xml file without namespace
tree = ET.parse("sample.xml")
root = tree.getroot()
print("%s : %s"%(root.tag, root.attrib))
out_handle = open("customer_header.xml","ab")
for elt in root.iter():
all_ntry = elt.findall('Customer') ## Not returning all Customer elements, even though ET.register_namespace('',uri) mentioned before parsing
for ele in all_ntry:
print("Customer Block Found:%s"%ele)
ele_tree = ET.ElementTree(ele)
ele_tree.write(out_handle)
XML文件(sample.xml):
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.company.org/2000/instance"
xmlns="urn:iso:2012.tech.xsd.001.04">
<BackToCustomer>
<CustGrup>
<Mid>000002</Mid>
<Date>2017-09-24T00:54:26</Date>
<Info>TEST</Info>
</CustGrup>
<Batch>
<Id>12345678</Id>
<Date>2017-09-22T13:54:26</Date>
<ListInfo>
<Id>
<Othr>
<Id>TEST_ListInfo</Id>
</Othr>
</Id>
</ListInfo>
<Details>
<Total>
<Count>5</Count>
<Amt>25.80</Amt>
</Total>
</Details>
<Customer>
<CustomerRef>ABC123</CustomerRef>
</Customer>
<Customer>
<CustomerRef>XYZ123</CustomerRef>
</Customer>
</Batch>
</BackToCustomer>
</Document>
我只需要编写一个没有命名空间的文件Customer元素。