2012-03-08 3 views
2

Beautiful Soup을 사용하여 xml 파일을 구문 분석하고 있지만 빈 요소를 구문 분석 할 때 일관성없는 동작을 발견했습니다. 나는. b 태그가 아니라 초에서, 첫 번째 경우에서 a 태그 내에 있는지Beautiful Soup에서 빈 요소 오류가 발생했습니다.

from BeautifulSoup import BeautifulSoup 
s1 = "<c><a /><b /></c>" 
s2 = "<c><a></a><b></b></c>" 
soup1 = BeautifulSoup(s1) 
soup2 = BeautifulSoup(s2) 
print soup1 
# <c><a><b></b></a></c> 
print soup2 
# <c><a></a><b></b></c> 

참고. 나는 XML 사양이 s1s2은 동등하다는 것을 의미한다고 생각했다.

내가 어떻게 처리 할 수 ​​있을지에 대한 의견이 있으십니까?

답변

1

앵커 및 굵게 (<a>, <b>) 요소는 자동으로 닫을 수 없으므로 잘못된 XHTML입니다.

가 후행 앞에 공백 포함 /과> 빈 요소, 예를 들어,의 :

그 꼭대기에

XHTML spec는 공간이 슬래시을 주도해야한다고 < br />, < hr /> 및 < img src = "karen.jpg"alt = "Karen"/>. 또한 빈 요소에 대해 최소화 된 태그 구문을 사용하십시오 (예 : < br />을 대체 문법으로 사용하여 XML로 허용되는 < br> </br>은 많은 기존 사용자 에이전트에서 불확실한 결과를 제공합니다.

+0

'a'와 'b'는 임의로 선택할 수 있습니다. 나는 (X) HTML이 아닌 XML 태그로 작업하고있다. 또한 공간을 추가해도 차이가 없습니다. – BrT

+1

BrT : BeautifulSoup는 (X) HTML 구문 분석기이며 XML 구문 분석기는 아닙니다. 이 때문에 그것은 의미가있는 요소에 대해 자동 닫기 태그 만 지원합니다. 범용 XML 파싱의 경우 __ ['xml.dom.minidom'] (http://docs.python.org/library/xml.dom.minidom.html#module-xml.dom.minidom) __을 사용하십시오. 자체 마감 태그를 지원하는지 여부는 확실하지 않지만, 그렇지 않은 경우 항상 정규식을 대체 할 수 있습니다. – orlp

+0

아, 미안, 나는 BeautifulSoup에 대해 깨닫지 못했다. 나는 minidom을 살펴볼 것이다. 감사! – BrT

관련 문제