2012-07-05 3 views
0

를 발행 :의 XPath 네임 스페이스

다음은
namespace error : Namespace prefix stream on features is not defined 
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism 
       ^

내 코드입니다 0
mechanisms = [] 

xmlParsed = libxml2.parseDoc(xmlResponse) 

xpathContext = xmlParsed.xpathNewContext() 
xpathContext.xpathRegisterNs('urn','http://etherx.jabber.org/streams') 
xpathContext.xpathRegisterNs('sasl', 'urn:ietf:params:xml:ns:xmpp-sasl') 
nodes = xpathContext.xpathEval("//urn:stream/features/sasl:mechanisms/sasl:mechanism/text()|//urn:features/sasl:mechanisms/sasl:mechanism/text()") 
for node in nodes: 
    mechanisms.append(str(node)) 

내가 뭘 잘못하고 어떻게 할 수 있습니까? 제발 XMPP 라이브러리 등을 사용하지 말고 전체 XMPP 클라이언트를 작성하려하지 않습니다. 난 단지 사용자로 등록하기에 충분한 코드를 원한다.

답변

1

<stream:features> 태그에 대해 접두어 stream이 정의되어 있지 않다는 오류가보고 된 것으로 생각합니다.

<stream:features>features 태그가 접두어 stream으로 표시된 네임 스페이스 아래에 있으며 XML 조각에 선언 된 네임 스페이스가 없음을 나타냅니다.

+0

"|" 꽤 잘못되었습니다. "|" 연산자는 "두 노드 집합의" "합집합"을 의미합니다. 이 표현식에서는 완벽하게 올바르게 사용됩니다. 이것 때문에 응답을 downvoting. –

+0

수정 주셔서 감사합니다! –

2

처음부터 자신 만의 XMPP 라이브러리를 작성하지 마십시오. xmpp.org에는 이미 많은 목록이 있습니다. 특히 파이썬의 경우 SleekXMPP을 사용해보십시오.

예를 들어, parseDoc을 사용하면 작동하지 않습니다. XML을 단계적으로 구문 분석해야합니다. "stream : features"의 "stream"에 대한 접두사 정의가 누락 된 것은 이런 종류의 문제의 증상입니다.