여러 트리가 있고 각 트리 구조가 다르게 보입니다.
내가 달성하려는 것은 "일련 번호"태그가있는 모든 하위 항목과 "수준"이 무엇인지, 부모 "일련 번호"가 누구인지 찾는 것입니다.
예를 들어 다음 XML
**<?xml version="1.0"?>
<data>
<Product Name="Product A">
<Country>US</Country>
<Year>2009</year>
<Serial Number>AB102</Serial Number>
<Document>
<Country>US</Country>
<Serial Number>BB103</SerialNumber>
</Document>
<Document>
<Country>IA</Country>
<Serial Number>CC102</Serial Number>
<Document>
<Serial Number>DD102</Serial Number>
</Document>
</Document>
</Product Name>
</data>
나는 가져오고 싶다
Serial Number | Parent Serial Number | Level
AB102 root 0
BB103 AB102 1
CC102 AB102 1
DD102 CC102 2
내 첫 번째 아이디어는 일종의 재귀 함수를 시도하고 구현하는 것이지만 작동하도록 설정해야하는 논리를 이해하는 데 어려움이 있습니다. 다른 사람이 비슷한 일을했거나이 재귀 함수를 올바르게 구현하는 방법을 알고 있습니까?
태그에 공백과 일치하지 않는 철자를 사용하여 제공된 XML (잘못된 xml로 인해)을 몇 가지 변경해야했습니다. 그러나 다음은 다른 것이 없다면 시작점을 제공 할 것입니다 (변경된 XML은 아래에 있음).
<?xml version="1.0"?>
<data>
<ProductName Name="Product A">
<Country>US</Country>
<Year>2009</Year>
<SerialNumber>AB102</SerialNumber>
<Document>
<Country>US</Country>
<SerialNumber>BB103</SerialNumber>
</Document>
<Document>
<Country>IA</Country>
<SerialNumber>CC102</SerialNumber>
<Document>
<SerialNumber>DD102</SerialNumber>
</Document>
</Document>
</ProductName>
</data>
import xml.etree.ElementTree as ET
tree = ET.parse('example.xml')
root = tree.getroot()
def process_children(tree_in, parent_name, depth):
next_depth = depth + 1
for c in list(tree_in):
if(c.tag == 'SerialNumber'):
print('{0} | {1} | {2}'.format(c.text, parent_name, depth))
parent_name = c.text
process_children(c, parent_name, next_depth)
process_children(root, 'root', -1)
AB102 | root | 0
BB103 | AB102 | 1
CC102 | AB102 | 1
DD102 | CC102 | 2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다