요소를 사용하여 Python에서 XML 구문 분석트리 예제
Element Tree를 사용하여 python에서 XML을 구문 분석하는 방법의 좋은 기본적인 예를 찾는데 어려움을 겪고 있습니다.XML을 구문 분석하는 데 가장 사용하기 쉬운 라이브러리인 것 같습니다. 다음은 제가 작업하고 있는 XML의 샘플입니다.
<timeSeriesResponse>
<queryInfo>
<locationParam>01474500</locationParam>
<variableParam>99988</variableParam>
<timeParam>
<beginDateTime>2009-09-24T15:15:55.271</beginDateTime>
<endDateTime>2009-11-23T15:15:55.271</endDateTime>
</timeParam>
</queryInfo>
<timeSeries name="NWIS Time Series Instantaneous Values">
<values count="2876">
<value dateTime="2009-09-24T15:30:00.000-04:00" qualifiers="P">550</value>
<value dateTime="2009-09-24T16:00:00.000-04:00" qualifiers="P">419</value>
<value dateTime="2009-09-24T16:30:00.000-04:00" qualifiers="P">370</value>
.....
</values>
</timeSeries>
</timeSeriesResponse>
저는 하드 코딩 방식을 사용하여 필요한 일을 할 수 있습니다.하지만 제 코드가 좀 더 역동적이어야 합니다.작동한 내용은 다음과 같습니다.
tree = ET.parse(sample.xml)
doc = tree.getroot()
timeseries = doc[1]
values = timeseries[2]
print child.attrib['dateTime'], child.text
#prints 2009-09-24T15:30:00.000-04:00, 550
다음은 몇 가지 시도했지만 아무도 작동하지 않았고 TimeSeries를 찾을 수 없다고 보고했습니다(또는 시도한 다른 것).
tree = ET.parse(sample.xml)
tree.find('timeSeries')
tree = ET.parse(sample.xml)
doc = tree.getroot()
doc.find('timeSeries')
기본적으로 xml 파일을 로드하고 timeSeries 태그를 검색한 후 값 태그를 반복하여 dateTime과 태그 자체의 값을 반환합니다. 위 예제에서 수행하는 모든 작업이지만 관심있는 xml 섹션을 하드코딩하지는 않습니다.누가 몇 가지 예를 들어 설명해 주거나, 이 문제를 해결하는 방법에 대해 제안해 줄 수 있습니까?
도와주셔서 감사합니다.아래 두 가지 제안 모두 제가 제공한 샘플 파일에서 작동했지만 전체 파일에서는 작동하지 않았습니다.Ed Carrel의 메서드를 사용할 때 실제 파일에서 발생하는 오류는 다음과 같습니다.
(<type 'exceptions.AttributeError'>, AttributeError("'NoneType' object has no attribute 'attrib'",), <traceback object at 0x011EFB70>)
저는 실제 파일에 뭔가 마음에 들지 않는 것이 있다는 생각이 들어 그것이 작동할 때까지 점점 더 제거했습니다.제가 변경한 줄은 다음과 같습니다.
originally: <timeSeriesResponse xsi:schemaLocation="a URL I removed" xmlns="a URL I removed" xmlns:xsi="a URL I removed">
changed to: <timeSeriesResponse>
originally: <sourceInfo xsi:type="SiteInfoType">
changed to: <sourceInfo>
originally: <geogLocation xsi:type="LatLonPointType" srs="EPSG:4326">
changed to: <geogLocation>
'xsi:...'이(가) 있는 특성을 제거하는 중입니다..' 문제를 고쳤습니다.xsi:...' 유효한 XML이 아닌가요? 프로그래밍적으로 제거하기가 어렵습니다.제안할 수 있는 방법이 있습니까?
다음은 전체 XML 파일입니다. http://www.sendspace.com/file/lofcpt
처음에 이 질문을 했을 때는 XML의 네임스페이스에 대해 잘 몰랐기 때문에 이제는 네임스페이스 선언인 "xsi" 속성을 제거할 필요가 없습니다.그냥 내 xpath 검색에 그것들을 포함합니다.lxml의 네임스페이스에 대한 자세한 내용은 이 페이지를 참조하십시오.
그래서 나는 요소가 있습니다.지금 내 상자에 1.2.6을 트리하고, 당신이 올린 XML 청크에 대해 다음 코드를 실행했습니다.
import elementtree.ElementTree as ET
tree = ET.parse("test.xml")
doc = tree.getroot()
thingy = doc.find('timeSeries')
print thingy.attrib
그리고 다음을 돌려 받았습니다.
{'name': 'NWIS Time Series Instantaneous Values'}
수치 인덱스를 사용할 필요 없이 시계열 요소를 찾은 것으로 보입니다.
지금 유용한 것은 당신이 "효과가 없다"고 말할 때 당신이 의미하는 바를 아는 것입니다.동일한 입력이 주어지면 제게 적합하기 때문에, Element는 가능하지 않습니다.나무는 어떤 명백한 방법으로 부러졌습니다.오류 메시지, 역추적 또는 당사에서 제공할 수 있는 모든 내용으로 질문을 업데이트합니다.
질문을 제대로 이해했다면 다음을 수행합니다.
for elem in doc.findall('timeSeries/values/value'):
print elem.get('dateTime'), elem.text
또는 원하는 경우(및 한 번만 발생하는 경우)timeSeries/values
:
values = doc.find('timeSeries/values')
for value in values:
print value.get('dateTime'), elem.text
findall()
요소의 method는는든의을는면는,면,find()
첫 번째 일치하는 요소만 반환합니다. 번째 는 모든 하고, 두 첫는에를고의위는에다를째두째된위다에를e의s는f째두rretse,edees첫l .values
요소, 이 경우 동일한 결과로 이어집니다.
발견되지 않는 문제가 어디에 있는지 모르겠습니다.timeSeries
그러나.아마도 당신은 그냥 잊어버린 것일거에요.getroot()
경로 출?로 변경하면 할 수 에 실제로.)/timeSeriesResponse/timeSeries/values
아니면//timeSeries/values
)
언급URL : https://stackoverflow.com/questions/1786476/parsing-xml-in-python-using-elementtree-example
'programing' 카테고리의 다른 글
Submodule로 Subversion 저장소를 가질 수 있습니까? (0) | 2023.09.11 |
---|---|
중복된 행의 인덱스 찾기 (0) | 2023.09.11 |
데이터베이스에서 드롭다운 목록을 채우는 올바른 방법은 무엇입니까? (0) | 2023.09.11 |
워드프레스 쇼트코드가 작동하지 않음 (0) | 2023.09.11 |
MySQLDB 패키지 설치 방법은?(가져오기 오류: setuptools라는 모듈이 없습니다.) (0) | 2023.09.11 |