解析 python 中的 XML 与多个孩子

Parse XML in python with multiple childs

我有这个 XML :

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
        <OCR_ERRORS_TABLE>
                <FIGURE>
                        <ELEMENT>
                                <REF>0</REF>
                                <MISREAD_CHARS>O</MISREAD_CHARS>
                        </ELEMENT>
                        <ELEMENT>
                                <REF>1</REF>
                                <MISREAD_CHARS>rilLM</MISREAD_CHARS>
                        </ELEMENT>
                        <ELEMENT>
                                <REF>6</REF>
                                <MISREAD_CHARS>G</MISREAD_CHARS>
                        </ELEMENT>
                </FIGURE>
                <LETTER>
                        <ELEMENT>
                                <REF>O</REF>
                                <MISREAD_CHARS>0</MISREAD_CHARS>
                        </ELEMENT>
                </LETTER>
        </OCR_ERRORS_TABLE>
</ROOT>

在不同的情况下,我必须获取 FIGURE 元素或 LETTER。我的问题是我不知道如何迭代元素并将 REF 和 MISREAD_CHARS 放入 var.

现在这是我的 python 代码,使用 ElementTree 库:

configPath = 'config/ocr_errors.xml'
root = ET.parse(configPath).getroot()

if letterToFigure:
    for child in root.find('.//FIGURE//ELEMENT'):
        print child.get('REF')

但最后的打印给了我 "None"。

也许它会有所帮助,但这是我想要的 PHP 版本,可以正常工作:

$ocrErrorsTbl=simplexml_load_file($this->_working_directory_path."/config/ocr_errors.xml");
    if($letterToFigure)
        foreach($ocrErrorsTbl->OCR_ERRORS_TABLE->FIGURE->ELEMENT as $ele)
            $OCRERRTBL[(string)$ele->REF]=(string)$ele->MISREAD_CHARS;
    else
        foreach($ocrErrorsTbl->OCR_ERRORS_TABLE->LETTER->ELEMENT as $ele)
            $OCRERRTBL[(string)$ele->REF]=(string)$ele->MISREAD_CHARS;

get() returns 属性不是子项。你可以这样做:

result = {}
if letterToFigure:
    for child in root.findall('.//FIGURE/ELEMENT'):
        ref, misread = list(child)
        result[ref.text] = misread.text

print result

Returns:

{'1': 'rilLM', '0': 'O', '6': 'G'}