解析 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'}
我有这个 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'}