[PYTHON] ElementTree 요소에서 줄 번호를 가져 오는 방법이 있나요?
PYTHONElementTree 요소에서 줄 번호를 가져 오는 방법이 있나요?
그래서 파이썬 3.2.1의 cElementTree를 사용하여 XML 파일을 파싱 할 때 파싱하는 동안 일부 태그에 속성 정보가 누락되어 있음을 발견했습니다. xml 파일에서 해당 요소의 줄 번호를 가져 오는 쉬운 방법이 있는지 궁금합니다.
해결법
-
==============================
1.문서를 보면 cElementTree를 사용하여이 작업을 수행 할 방법이 없습니다.
문서를 보면 cElementTree를 사용하여이 작업을 수행 할 방법이 없습니다.
그러나 lxmls 버전의 XML 구현에는 운이 좋았습니다. 그것은 libxml2를 사용하여 거의 대체품이 될 것으로 예상됩니다. 그리고 요소에는 sourceline 특성이 있습니다. (뿐만 아니라 다른 XML 기능을 많이 받고).
단지주의해야 할 점은 파이썬 2.x에서만 사용했다는 것입니다. - 어떻게 3.x에서 작동하는지 모르겠지만 - 한 번해볼 가치가 있습니다.
추가: 그들의 첫 페이지에서 그들은 말한다 :
그래서 파이썬 3.x는 괜찮아 보인다.
-
==============================
2.Python 3.x (3.3.2 사용)를 사용하여이 작업을 수행하는 방법에 대해 잠시 생각해 보았습니다. 요약하면 다음과 같습니다.
Python 3.x (3.3.2 사용)를 사용하여이 작업을 수행하는 방법에 대해 잠시 생각해 보았습니다. 요약하면 다음과 같습니다.
# Force python XML parser not faster C accelerators # because we can't hook the C implementation sys.modules['_elementtree'] = None import xml.etree.ElementTree as ET class LineNumberingParser(ET.XMLParser): def _start_list(self, *args, **kwargs): # Here we assume the default XML parser which is expat # and copy its element position attributes into output Elements element = super(self.__class__, self)._start_list(*args, **kwargs) element._start_line_number = self.parser.CurrentLineNumber element._start_column_number = self.parser.CurrentColumnNumber element._start_byte_index = self.parser.CurrentByteIndex return element def _end(self, *args, **kwargs): element = super(self.__class__, self)._end(*args, **kwargs) element._end_line_number = self.parser.CurrentLineNumber element._end_column_number = self.parser.CurrentColumnNumber element._end_byte_index = self.parser.CurrentByteIndex return element tree = ET.parse(filename, parser=LineNumberingParser())
-
==============================
3.ElementTree.XMLTreeBuilder를 하위 클래스 화하여 elementtree에서이 작업을 수행했습니다. 그런 다음 self._parser (Expat)에 액세스 할 수있는 곳은 _parser.CurrentLineNumber 및 _parser.CurrentColumnNumber 속성이 있습니다.
ElementTree.XMLTreeBuilder를 하위 클래스 화하여 elementtree에서이 작업을 수행했습니다. 그런 다음 self._parser (Expat)에 액세스 할 수있는 곳은 _parser.CurrentLineNumber 및 _parser.CurrentColumnNumber 속성이 있습니다.
http://docs.python.org/py3k/library/pyexpat.html?highlight=xml.parser#xmlparser-objects에는 이러한 속성에 대한 세부 정보가 있습니다.
파싱하는 동안 정보를 출력하거나 출력 XML 요소 속성에이 값을 넣을 수 있습니다.
XML 파일에 추가 XML 파일이 포함되어 있다면 기억이 안 나는 항목을 수행해야하며 현재 XML 파일을 추적하기 위해 문서화되지 않았습니다.
-
==============================
4.이 작업을 수행하는 한 가지 방법은 파싱하기 전에 각 요소에 줄 번호를 포함하는 더미 특성을 삽입하는 것입니다. 여기 내가 미니멈으로 어떻게 했는가?
이 작업을 수행하는 한 가지 방법은 파싱하기 전에 각 요소에 줄 번호를 포함하는 더미 특성을 삽입하는 것입니다. 여기 내가 미니멈으로 어떻게 했는가?
파이썬보고 라인 / XML 노드의 원점 컬럼
이것은 cElementTree (또는 사실 다른 파이썬 XML 파서)에 간단히 적용될 수 있습니다.
from https://stackoverflow.com/questions/6949395/is-there-a-way-to-get-a-line-number-from-an-elementtree-element by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 : 빌트인리스트 타입으로부터 어떻게 상속받을 수 있습니까? (0) | 2018.11.24 |
---|---|
[PYTHON] 파이썬에서 PowerShell 스크립트 호출하기 (0) | 2018.11.24 |
[PYTHON] 파이썬 컬렉션. 카운터 : most_common complexity (0) | 2018.11.24 |
[PYTHON] 함수에서 전역 가져 오기를 만드는 방법은 무엇입니까? (0) | 2018.11.24 |
[PYTHON] 다른 파이썬 스크립트 파일 내부의 인자로 파이썬 스크립트 파일을 실행하는 법 (0) | 2018.11.24 |