Python编写没有命名空间的XML子元素

时间:2017-09-24 18:34:06

标签: python-2.7 namespaces

我在发布关于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元素。

0 个答案:

没有答案