2009-08-08 3 views
2

cElementTree 라이브러리를 사용하여 Python에서 XML 파일을 구문 분석합니다. 모든 것이 잘 작동합니다.파이썬에서 cElementTree를 사용하여 XML 파일을 구문 분석 : 파일의 오류 및 행 번호를 처리합니다.

XML의 값이 올바르지 않은 경우 사용자에게 전체 오류 메시지를 제공하고 싶습니다.

<A name="xxxx" href="yyyy"/> 

을하고 href 속성이 존재 또는 주어진 목록에없는 값이없는 경우 사용자가 말하고 싶은 :

예를 들어, 나는 다음과 같은 XML이 있다고 가정하자. 순간

, 내 예외가 어딘가에 잡힌
if elem.get("ref") not in myList: 
    raise XMLException(elem, "the 'href' attribute is not valid or does not exist") 

같은 것을 가지고있다.

그러나 XML 요소의 줄 번호를 파일에 표시하고 싶습니다. 그렇게 할 수있는 동등한 XML 라이브러리가 있나요 :

질문 :-(... cElementTree 트리의 XML 요소의 줄 번호에 대한 정보를 저장하지 않는 것 같다? 아니면 방법은 XML 파일의 XML 요소의 위치에 액세스 할 수 있도록?

감사

답변

4

사용한다 등가 라이브러리 lxml입니다. LXML가 매우 빠른 C에 대한 래퍼입니다 libxml2를하고 libxslt를을 도서관 일반적으로 내장 된 것보다 우수한 것으로 간주됩니다.

luckly, 요소 트리 api 유지하고 lxml.etree 확장 할 시도합니다.

lxml.etree에는 사용자가 원하는 모든 요소에 대해 sourceline 특성이 있습니다.

위의 elem.sourceline 위의 오류 메시지가 작동해야합니다.

+0

답변 감사합니다. lxml 잘 작동하고 요소를 sourceline 특성이 있습니다. 내 오래된 컴퓨터에서 lxml은 cElementTree에 비해 상대적으로 느립니다 (입력 파일에 따라 25 %에서 50 % 더 느림) – ThibThib

+0

http://codespeak.net/lxml/performance.html. 로딩, 구문 분석, cElementTree는 더 느리지 만 트리 순회 및 직렬화는 더 빠릅니다. –

+0

sourceline은 거대한 파일의 오류 처리에 큰 도움이됩니다! 감사 :) –