2012-03-31 1 views
0

dom.minidom 함수를 사용하여 XML의 일부를 추출하는 방법을 배우고 특정 요소와 특성을 성공적으로 반환 할 수 있습니다.Python에서 XML을 '걷는'공식적인 방법이 있습니까?

저는 구문 분석하고자하는 많은 수의 큰 XML 파일을 가지고 있으며 모든 결과를 db로 푸시합니다. os.walk와 같은 기능을 사용하여 계층 구조를 유지하는 논리적 인 방법으로 XML 요소를 추출하고 추출 할 수 있습니까?

는 XML 매우 기본적인 매우 정직 (이 작은 예에서)이 XML과 크롤링 각 특정 InternalSignature 관련 요소를 추출하는 정식 방법

<InternalSignature ID="9" Specificity="Generic"> 
<ByteSequence Reference="BOFoffset"> 
    <SubSequence Position="1" SubSeqMinOffset="0" SubSeqMaxOffset="0" MinFragLength="0"> 
    <Sequence>49492A00</Sequence> 
    <DefaultShift>5</DefaultShift> 
    <Shift Byte="00">1</Shift> 
    <Shift Byte="2A">2</Shift> 
    <Shift Byte="49">3</Shift> 
    </SubSequence> 
</ByteSequence> 
</InternalSignature> 
<InternalSignature ID="10" Specificity="Generic"> 
<ByteSequence Reference="BOFoffset"> 
    <SubSequence Position="1" SubSeqMinOffset="0" SubSeqMaxOffset="0" MinFragLength="0"> 
    <Sequence>4D4D002A</Sequence> 
    <DefaultShift>5</DefaultShift> 
    <Shift Byte="2A">1</Shift> 
    <Shift Byte="00">2</Shift> 
    <Shift Byte="4D">3</Shift> 
    </SubSequence> 
</ByteSequence> 
</InternalSignature> 

있는가? minidom.parse 및 .GetElementsByName 메서드를 사용하여 목록을 통해 항목을 호출하는 방법을 볼 수 있지만 요소를 계층 적 표현에 연결하는 방법을 잘 모르겠습니다.

내가 여러 값을 반환하는 방법을 보여줍니다 튜토리얼 발견 지금까지

:

xmldoc = minidom.parse("file.xml") 
Versionlist = xmldoc.getElementsByTagName('FFSignatureFile') 
VersionRef = Versionlist[0] 
Version = VersionRef.attributes["Version"] 
DateCreated = VersionRef.attributes["DateCreated"] 
print Version.value 
print DateCreated.value 
InternalSignatureList = xmldoc.getElementsByTagName('InternalSignature') 
InternalSignatureRef = InternalSignatureList[0] 
SigID = InternalSignatureRef.attributes["ID"] 
SigSpecificity = InternalSignatureRef.attributes["Specificity"] 
print SigID.value 
print SigSpecificity.value 
print len(InternalSignatureList) 
내가 마지막 라인 InternalSignatureList 134 개 요소가 있다는 것을 (LEN)에서 볼 수

, 그리고 기본적으로 내가 원하는 각 InternalSignature 내부의 모든 요소를 ​​개별 레코드로 추출하고이를 db로 넘겨 줄 수 있어야합니다.

+0

음, 제가 질문을 이해한다면 모르겠지만 방법에 대한 [XPath는 (http://en.wikipedia.org/wiki/XPath) ('getchildren() '과 결합 가능합니다 - 적어도'lxml'은 XML 트리를 가로 지르는 데 사용합니다 .. – Kimvais

답변

3

(당신이 시도 무엇입니까?)

from xml.etree import ElementTree 

e = ElementTree.fromstring(xmlstring) 
e.findall("ByteSequence") 
+0

와우. 방금 구글에서 이것을 발견했습니다. – Glycerine