【问题标题】:parsing xml document using elementTree, python使用elementTree,python解析xml文档
【发布时间】:2017-01-30 09:14:12
【问题描述】:
import xml.etree.ElementTree as ET

tree = ET.parse("Parsed.xml")
doc = tree.getroot()

for elem in doc.findall('.//medicationsInfo/entryInfo/productCode/code'):
    print (elem.text);

for elem in doc.findall('.//medicationsInfo/entryInfo/productCode/codeSystem'):
    print (elem.text);  

在上面的 python 代码中,我通过指定路径获取 code 和 codeSystem 的值,但它们首先打印所有代码,然后打印所有 codeSystem。我想并行打印它们(如按列打印),那么如何编辑上述代码以解析我的 xml 文档。

例如,我以这种方式拥有 xml,我想按列打印 code 和 codeSystem。

【问题讨论】:

    标签: python xml-parsing elementtree


    【解决方案1】:

    这不是最好的方法,但应该可以。我们扫描 xml 寻找 codecodeSystem,相信它们总是成对出现(应该由 xml 架构强制执行)。

    我们创建两个列表,其中一个是 code 值,另一个是 codeSystem,然后通过迭代它们来输出列表以重新创建对。

    codeList=[]
    codeSystemList=[]
    
    for elem1 in doc.findall('.//medicationsInfo/entryInfo/productCode/code'):
        codeList.append(elem1.text)
    
    for elem2 in doc.findall('.//medicationsInfo/entryInfo/productCode/codeSystem'):
        codeSystemList.append(elem2.text)
    
    
    for i in range(len(codeList)):
        print(codeList[i],codeSystemList[i])
    

    NB 在问题中提供了新信息后,此答案已更新,因此应忽略前几个 cmets

    【讨论】:

    • 上面的代码我已经试过了,如果有17个代码并且codeSystem在productCode下,它正在打印17 * 17行。
    • 认为这可能是个问题。感谢您提供 xml 示例。对于每个productCode,您是否只需要第一对codecodeSystem,或者您是否还需要包含为不同系统翻译代码的后一对?
    • 更新了答案,请尝试上面显示的新代码
    • 但是当我处理大数据时,是否可以使用两个 for 循环,如 i 和 j,并附加它们? @CJC
    • 可能,但我没有使用过 ElementTree,所以我不确定如何使用。正如我在回答中指出的那样,这可能不是实现所需结果的最佳方法,而是一种实用的解决方案。您可能需要定位 xml 的 /productCode 级别,然后收集每个值对。使用find 命令,您可以依次扫描并找到每一对,而不是使用findall
    猜你喜欢
    • 2021-02-06
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多