2010-06-03 2 views
0

Python new을 처음 접했을 때 반복되는 질문이나 기본 질문 인 경우 유감입니다. Daniel과 George의 태그 값을 "추출"할 수 있도록 다음 XML 명령을 구문 분석하려고합니다. Daniel = 78, George = 90처럼 보이기를 원합니다.비슷한 태그와 다른 속성을 가진 XML 파일을 구문 분석하십시오!

<epas:property name="Tom">12</epas:property> 
<epas:property name="Alice">34</epas:property> 
<epas:property name="John">56</epas:property> 
<epas:property name="Danial">78</epas:property> 
<epas:property name="George">90</epas:property> 
<epas:property name="Luise">11</epas:property> 

xml 명령은 하나의 문자열에 저장됩니다. 그래서 여기 즉 mystring에 내가이 문자열 (mystring에) 구문 분석을 시도 코드의 첫 번째 부분입니다 :

element = xml.dom.minidom.parseString(myString).getElementByTagName ("epas:property") 
if not element: 
    print "error message" 
else: 
    for el in element: 
     value [el.getAttribute("name")] = el.firstChild.data 

내가 값을 얻기 위해 배열 인덱스에 다니엘과 조지을 참조하기 위해 노력을하지만 난 아니라고 본다 올바르게하는 것. 나는 이것에 대한 당신의 아이디어/의견을 고맙게 생각합니다. 건배, 빌

+0

그것 때문에 코드 형식으로 XML과 파이썬 코드를 넣어 : ElementTree와

myString = '<doc xmlns:epas="dummy">%s</doc>' % myString 

가이 같은 뭔가 올바르게 표시됩니다. –

+0

오류가 발생합니까? .getElementByTagName을 .getElementsByTagName으로 수정하고 네임 스페이스가 선언 된 루트 요소에 해당 xml 조각을 래핑하면 나머지는 작동합니다. 그렇지 않으면 오류 메시지가 나타납니다. –

+0

질문에 표시된 내용을 그대로 구문 분석하려는 XML입니까? 그렇다면 유효한 XML이 아닙니다. 속성 항목을 포함하려면 루트 요소가 있어야합니다. 그게 당신 문제의 원인이 될 수 있습니다. –

답변

1

이 xml.dom.minidom를 사용하지 마십시오

, 그것은 끔찍한 라이브러리입니다! ElementTree 또는 lxml을 사용하십시오 (ElementTree는 표준 라이브러리에 있으며 아마도 잘 작동 할 것입니다). 당신 해야

는 XML 네임 스페이스, 즉, xmlns:epas="http://something" 같은 것을 가지고있다. 또한 당신은 맨손으로 요소를 가질 수 없어, 그들은 동봉해야합니다. 당신이 "가짜"네임 스페이스가있는 경우 (즉, 어떤 선언은) 당신은 펀트하지 않고 할 수있는 :

import xml.etree.ElementTree as ET 
doc = ET.fromstring(myString) 
result = {} 
for el in doc.findall('{http://something}property): 
    result[el.get('name')] = int(el.text) 
+0

감사합니다. Ian. 파이썬 2.5.4 버전이 설치되어 있지만 "ET와 같은 etree.ElementTree라는 모듈이 없습니다"라는 메시지가 나타납니다. ElenetTree가 표준 라이브러리에 있다고 말했듯이 Python 2.5.4에서 작동해야합니다! 내가 여기서 뭔가를 놓치고 있니? :-) –

+0

2.5는 ElementTree를 포함해야합니다. 일부 운영 체제에서는 별도의 설치 (즉, 패키지 관리자가 표준 라이브러리에서 분리) 할 수 있습니다. ElementTree를 설치 한 다음 ElementTree를 ET로 가져올 수도 있습니다. –

관련 문제