我正在嘗試使用XPath和Android解析簡單的SIP消息。其中一條消息在this document中描述。使用XPath解析簡單的SIP消息android
實際的消息是這樣的:
<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 2011-03-20 19:35:10
需求是mjsip消息對象。 Thid是一個ontransaction請求方法,req是該請求的sip消息。問候maxsap – maxsap 2011-03-20 22:48:33