2016-09-08 3 views
0

저는 파이썬의 lxml.objectify 라이브러리를 사용하여 읽고있는 XML 파일을 가지고 있습니다. (더 좋은 방법이있다 xml.comment[1] 작동하지 않는 것?) 내가 코멘트를 검색 할 수있어lxml.objectify 주석의 내용 얻기

<data> 
    <!--Contents 1--> 
    <some_empty_tag/> 
    <!--Contents 2--> 
</data> 

:

나는 XML 주석의 내용을 얻기의 방법을 찾는 게 아니에요 :

xml = objectify.parse(the_xml_file).getroot() 
for c in xml.iterchildren(tag=etree.Comment): 
    print c.???? # how do i print the contets of the comment? 
    # print c.text # does not work 
    # print str(c) # also does not work 

올바른 방법은 무엇입니까?

+0

xml 라이브러리를 사용하여 주석을 구문 분석 할 수있을 것으로 기대하지는 않습니다. 정의에 따라 xml 구조체의 일부가 아니며 항상 모든 도구에서 무시할 수 있습니다. – Daenyth

답변

0

당신은 다음과 같이 주석을 추출하기 위해 문자열로 다시 아이를 변환 할 필요가 : 물론

In [1]: from lxml import etree, objectify 

In [2]: tree = objectify.fromstring("""<data> 
    ...: <!--Contents 1--> 
    ...: <some_empty_tag/> 
    ...: <!--Contents 2--> 
    ...: </data>""") 

In [3]: for node in tree.iterchildren(etree.Comment): 
    ...:  print(etree.tostring(node)) 
    ...: 
b'<!--Contents 1-->' 
b'<!--Contents 2-->' 

당신이 원하지 않는 포장을 제거 할 수 있습니다.

+0

이 방법으로 끝났지 만 해킹처럼 보였습니다. – RedX

+0

@RedX, 확실히 해킹처럼 보이지만 그렇지 않습니다. ''블록에 적절한 xml/html 속성 설정이 없다고 생각하면 텍스트 내용을 구문 분석하는 유일한 규칙/방법은 어쨌든 적어도 lxml의 경우 그대로 렌더링하는 것입니다. – Anzel

+0

나는'contents','raw','text' 또는 다른 함수를 사용하여 내용을 얻을 수있을 것으로 기대하고있었습니다. 나는 그것이 단지 텍스트 (AFAIK)라는 것을 의미합니다. – RedX