ElementTree와 해당 레벨에서 모든 유사한 태그를 재귀 적으로 찾는 방법은 무엇입니까?

kspr

여러 트리가 있고 각 트리 구조가 다르게 보입니다.

내가 달성하려는 것은 "일련 번호"태그가있는 모든 하위 항목과 "수준"이 무엇인지, 부모 "일련 번호"가 누구인지 찾는 것입니다.

예를 들어 다음 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 (example.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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

루비 해시에서 모든 nil 값을 ""로 재귀 적으로 바꾸는 방법은 무엇입니까?

분류에서Dev

폴더의 모든 파일에서 재귀 적으로 타사 유틸리티를 실행하는 방법은 무엇입니까?

분류에서Dev

PHP를 사용하여 FTP 서버에 생성 된 새 폴더에 모든 권한을 재귀 적으로 설정하는 방법은 무엇입니까?

분류에서Dev

주어진 패턴과 일치하는 모든 노드에 대해 JSON 파일을 재귀 적으로 검색하고 JSON '경로'를 노드와 그 값으로 반환하는 방법은 무엇입니까?

분류에서Dev

레벨 수에 관계없이 중첩 된 해시를 : [] 메소드로 재귀 적으로 보내는 방법은 무엇입니까?

분류에서Dev

lxml에서 특정 요소와 하위 요소를 재귀 적으로 얻는 방법은 무엇입니까?

분류에서Dev

내 모든 파일을 재귀 적으로 압축 해제하는 방법은 무엇입니까?

분류에서Dev

현재 디렉토리 내의 모든 디렉토리에 대한 권한을 재귀 적으로 변경하는 방법은 무엇입니까?

분류에서Dev

직접 개체와 해당 개체의 모든 직계 자식에서 '장난감'항목 수를 재귀 적으로 반환하는 방법

분류에서Dev

컨트롤러 외부에서 ActiveModel :: Serializers를 재귀 적으로 사용하는 방법은 무엇입니까?

분류에서Dev

중첩 된 객체의 모든 키를 재귀 적으로 가져 오는 방법은 무엇입니까?

분류에서Dev

특정 액세스 거부 경로를 제외하고 모든 로그 파일을 재귀 적으로 찾는 방법은 무엇입니까?

분류에서Dev

지정된 디렉토리에서 원하는 파일 유형의 모든 파일을 재귀 적으로 나열하는 방법은 무엇입니까?

분류에서Dev

재시작을 방해하는 "Windows에 로그인 한 사용자"를 찾는 방법은 무엇입니까?

분류에서Dev

다차원 배열에있는 모든 부모 요소의 ID를 재귀 적으로 가져올 수있는 방법은 무엇입니까?

분류에서Dev

dos2unix를 폴더의 모든 내용에 재귀 적으로 적용하는 방법은 무엇입니까?

분류에서Dev

Gradle에서 빈 디렉터리 (또는 모든 내용이 재귀 적으로 포함 된 디렉터리)를 삭제하는 방법은 무엇입니까?

분류에서Dev

각 디렉토리 내에서 모든 * NAD.TXT를 재귀 적으로 결합하는 Windows 배치 파일을 만드는 방법은 무엇입니까?

분류에서Dev

디렉토리의 모든 파일에서 비재 귀적으로 grep을 사용하는 방법은 무엇입니까?

분류에서Dev

디렉토리의 모든 파일에서 비재 귀적으로 grep을 사용하는 방법은 무엇입니까?

분류에서Dev

Linux를 사용하여 FTP 서버를 재귀 적으로 검색하는 방법은 무엇입니까?

분류에서Dev

한 번에 여러 디렉토리를 재귀 적으로 grep하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 재귀 적으로 빈 디렉토리를 찾는 방법은 무엇입니까?

분류에서Dev

이 ArrayList가 모든 것을 첫 번째 인덱스에 저장하는 이유는 무엇입니까? 그리고 해당 arraylist에서 JSP에서 이미지 URL을 동적으로로드하는 방법은 무엇입니까?

분류에서Dev

디렉토리에 영향을주지 않고 찾기를 사용하여 모든 파일을 재귀 적으로 실행 불가능하게 만드는 방법은 무엇입니까?

분류에서Dev

파일을 제외한 모든 디렉토리를 재귀 적으로 chmod하는 방법은 무엇입니까?

분류에서Dev

MongoDB : 조건을 사용하여 모든 자식 노드의 수를 재귀 적으로 얻는 방법은 무엇입니까?

분류에서Dev

터미널을 사용하여 모든 .svn 폴더를 재귀 적으로 삭제하는 방법은 무엇입니까?

분류에서Dev

로그인 한 모든 사용자에 대해 CAS를 쿼리하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    루비 해시에서 모든 nil 값을 ""로 재귀 적으로 바꾸는 방법은 무엇입니까?

  2. 2

    폴더의 모든 파일에서 재귀 적으로 타사 유틸리티를 실행하는 방법은 무엇입니까?

  3. 3

    PHP를 사용하여 FTP 서버에 생성 된 새 폴더에 모든 권한을 재귀 적으로 설정하는 방법은 무엇입니까?

  4. 4

    주어진 패턴과 일치하는 모든 노드에 대해 JSON 파일을 재귀 적으로 검색하고 JSON '경로'를 노드와 그 값으로 반환하는 방법은 무엇입니까?

  5. 5

    레벨 수에 관계없이 중첩 된 해시를 : [] 메소드로 재귀 적으로 보내는 방법은 무엇입니까?

  6. 6

    lxml에서 특정 요소와 하위 요소를 재귀 적으로 얻는 방법은 무엇입니까?

  7. 7

    내 모든 파일을 재귀 적으로 압축 해제하는 방법은 무엇입니까?

  8. 8

    현재 디렉토리 내의 모든 디렉토리에 대한 권한을 재귀 적으로 변경하는 방법은 무엇입니까?

  9. 9

    직접 개체와 해당 개체의 모든 직계 자식에서 '장난감'항목 수를 재귀 적으로 반환하는 방법

  10. 10

    컨트롤러 외부에서 ActiveModel :: Serializers를 재귀 적으로 사용하는 방법은 무엇입니까?

  11. 11

    중첩 된 객체의 모든 키를 재귀 적으로 가져 오는 방법은 무엇입니까?

  12. 12

    특정 액세스 거부 경로를 제외하고 모든 로그 파일을 재귀 적으로 찾는 방법은 무엇입니까?

  13. 13

    지정된 디렉토리에서 원하는 파일 유형의 모든 파일을 재귀 적으로 나열하는 방법은 무엇입니까?

  14. 14

    재시작을 방해하는 "Windows에 로그인 한 사용자"를 찾는 방법은 무엇입니까?

  15. 15

    다차원 배열에있는 모든 부모 요소의 ID를 재귀 적으로 가져올 수있는 방법은 무엇입니까?

  16. 16

    dos2unix를 폴더의 모든 내용에 재귀 적으로 적용하는 방법은 무엇입니까?

  17. 17

    Gradle에서 빈 디렉터리 (또는 모든 내용이 재귀 적으로 포함 된 디렉터리)를 삭제하는 방법은 무엇입니까?

  18. 18

    각 디렉토리 내에서 모든 * NAD.TXT를 재귀 적으로 결합하는 Windows 배치 파일을 만드는 방법은 무엇입니까?

  19. 19

    디렉토리의 모든 파일에서 비재 귀적으로 grep을 사용하는 방법은 무엇입니까?

  20. 20

    디렉토리의 모든 파일에서 비재 귀적으로 grep을 사용하는 방법은 무엇입니까?

  21. 21

    Linux를 사용하여 FTP 서버를 재귀 적으로 검색하는 방법은 무엇입니까?

  22. 22

    한 번에 여러 디렉토리를 재귀 적으로 grep하는 방법은 무엇입니까?

  23. 23

    파이썬에서 재귀 적으로 빈 디렉토리를 찾는 방법은 무엇입니까?

  24. 24

    이 ArrayList가 모든 것을 첫 번째 인덱스에 저장하는 이유는 무엇입니까? 그리고 해당 arraylist에서 JSP에서 이미지 URL을 동적으로로드하는 방법은 무엇입니까?

  25. 25

    디렉토리에 영향을주지 않고 찾기를 사용하여 모든 파일을 재귀 적으로 실행 불가능하게 만드는 방법은 무엇입니까?

  26. 26

    파일을 제외한 모든 디렉토리를 재귀 적으로 chmod하는 방법은 무엇입니까?

  27. 27

    MongoDB : 조건을 사용하여 모든 자식 노드의 수를 재귀 적으로 얻는 방법은 무엇입니까?

  28. 28

    터미널을 사용하여 모든 .svn 폴더를 재귀 적으로 삭제하는 방법은 무엇입니까?

  29. 29

    로그인 한 모든 사용자에 대해 CAS를 쿼리하는 방법은 무엇입니까?

뜨겁다태그

보관