XML 덩어리를 수신하는 네트워크 응용 프로그램 (Twisted 사용)이 있습니다 (전체 XML이 전체적으로 올 수 없음) 단일 패킷으로). 내 생각으로는 XML 메시지를 천천히 빌드하는 것입니다. xml.etree.ElementTree의 iterparse에 "정착"했습니다. 나는 몇 가지 코드에 취미 삼아 봤는데 다음과 같은 (비 트위스트 코드) 잘 작동 :iterparse가 '요소를 찾을 수 없습니다 : 줄 1, 열 0'을 던지고 이유가 확실하지 않습니다.
import xml.etree.ElementTree as etree
from io import StringIO
chunks = ['<notorious>','<burger/>','</notorious>']
buff = StringIO()
for ch in chunks:
buff.write(unicode(ch))
if buff.getvalue() == '<notorious><burger/></notorious>':
print("it should work now")
try:
for event, elem in etree.iterparse(buff, events=('end',)):
if elem.tag == 'notorious':
print(etree.tostring(elem))
except Exception as e:
print(e)
:
import xml.etree.ElementTree as etree
from io import StringIO
buff = StringIO(unicode('<notorious><burger/></notorious>'))
for event, elem in etree.iterparse(buff, events=('end',)):
if elem.tag == 'notorious':
print(etree.tostring(elem))
가 그럼 난 데이터가 내 말에 수신 할 수있는 방법을 시뮬레이션하기 위해 다음 코드를 내장
는하지만 코드가 그대로 출력 :
'을 (를) 찾을 수없는 요소 : 줄 1, 열 0'
나는 내 머리를 감쌀 수 없다. 두 번째 샘플의 stringIO가 첫 번째 코드 샘플에서 stringIO의 내용과 동일한 경우이 오류가 발생하는 이유는 무엇입니까?
PS :
- 나는 내가이에게 먼저하지만, 다른 스레드가 내 질문에 대답하지 해요 알고있다. 내가 틀렸다면 plz가 적절한 스레드를 제공합니다.
- 다른 모듈에 대한 제안 사항이 있으면 대답 plz에 입력하지 마십시오. 의견을 추가하다.
감사
Twisted에는 이미 XMPP를 구문 분석하기위한 twisted.words에 일부 스트림 파싱 XML 항목이 포함되어 있습니다. http://twistedmatrix.com/documents/current/api/twisted.words.protocols.jabber.xmlstream.XmlStream.html을 보시길 바랍니다. – Glyph
나는 바퀴를 재발견하려한다는 것을 알고있었습니다. Twisted 사이트의 모든 문서를 구문 분석하기 전에 더 나은 방법을 찾아야합니다. 여기에 질문을 게시하십시오. 라이브 및 배울 –
거룩한 달콤한 아기 jeebus XmlStream 어디까지 당신은 내 인생을 다 : D 조 감사 글리프! XmlStream은 XML 스트리밍을위한 방법입니다. –