XPath 및 Android를 사용하여 간단한 SIP 메시지를 구문 분석하려고합니다. 이 메시지 중 하나는 this document에 설명되어 있습니다.android에서 XPath로 간단한 SIP 메시지 구문 분석
실제 메시지는 다음과 같습니다
<isComposing xmlns='urn:ietf:params:xml:ns:imiscomposing'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<state>active </state>
<contenttype> text/html </contenttype>
<refresh>60</refresh>
</isComposing>
나는 SIP 요청에서 메시지를 얻고 상태를 찾기 위해 구문 분석을 시도 코드 블록을 가지고
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(false); // never forget this! THIS WAS TRUE ORIGINALLY CHANGED BY MAXSAP
DocumentBuilder builder;
try {
builder = domFactory.newDocumentBuilder();
Log.e("IMHandler","<onTransRequest> parsing body:: "+ req.getBody());
Document doc = builder.parse(req.getBody());
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr= xpath.compile("//isComposing/state/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Log.e("IMHandler"," <onTransRequest> *************** PARSING ***********");
Log.e("IMHandler"," <onTransRequest> NodeValue"+nodes.item(i).getNodeValue());
Log.e("IMHandler"," <onTransRequest> *************** /PARSING ***********");
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
하지만이 줄의 builder.parse (req.getBody()); 오류가 표시됩니다.
03-20 20:03:44.637: WARN/System.err(4150): java.net.MalformedURLException: Protocol not found: <SPAN STYLE="FONT-FAMILY:Arial; FONT-SIZE:10pt ">dfg</SPAN>
03-20 20:03:44.637: WARN/System.err(4150): at java.net.URL.<init>(URL.java:275)
03-20 20:03:44.637: WARN/System.err(4150): at java.net.URL.<init>(URL.java:159)
03-20 20:03:44.637: WARN/System.err(4150): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:120)
03-20 20:03:44.637: WARN/System.err(4150): at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:158)
03-20 20:03:44.637: WARN/System.err(4150): at org.sipdroid.sipua.ui.IMHandler.onTransRequest(IMHandler.java:239)
03-20 20:03:44.637: WARN/System.err(4150): at org.zoolu.sip.transaction.TransactionServer.onReceivedMessage(TransactionServer.java:148)
03-20 20:03:44.637: WARN/System.err(4150): at org.zoolu.sip.provider.SipProvider.processReceivedMessage(SipProvider.java:1091)
03-20 20:03:44.637: WARN/System.err(4150): at org.zoolu.sip.provider.SipProvider.onReceivedMessage(SipProvider.java:1203)
03-20 20:03:44.637: WARN/System.err(4150): at org.zoolu.sip.provider.UdpTransport.onReceivedPacket(UdpTransport.java:117)
03-20 20:03:44.637: WARN/System.err(4150): at org.zoolu.net.UdpProvider.run(UdpProvider.java:189)
누구에게도 동일한 오류가 발생 했습니까? 나는 XPath를 사용하는 것에 익숙하지 않으며, 네임 스페이스를 네임 스페이스 문제이지만 행운을 바라지 않게 변경했다.
XPath에는 문제가 없다고 생각합니다. 'req' 란 무엇입니까? 'req' 변수와 관련된 코드를 보여줍니다. – Olegas
Req는 mjsip 메시지 개체입니다. Thid는 트랜잭션 요청 방법이고 req는 요청의 메시지입니다. 감사합니다 maxsap – maxsap