在python中解析具有多个子元素的XML

时间:2018-04-03 15:05:20

标签: python xml elementtree

我有这个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>

在不同情况下,我必须得到FIG元素或LETTER。我的问题是我不知道如何迭代元素并将REF和MISREAD_CHARS变为var。

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

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

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

但最后一次印刷给了我&#34;无&#34;。

也许它可以提供帮助,但这里有我想要的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;

1 个答案:

答案 0 :(得分:1)

get()返回属性而不是子元素。你可以这样做:

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

print result

返回:

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