我想解析android中的以下数据。
<?xml version="1.0" encoding="UTF-8"?>
Info: POST /Remindz_api/user/loginHTTP/1.1
Host: www.narola.co
Accept: www.narola.co.beepz.api+xml
HTTP 1.1 200 OK
Content-Type: www.narola.co.beepz.api+xml;
Allow : GET,POST
<user id="43">
<firstname>Dfdf</firstname>
<lasttname>p2</lasttname>
<email>p</email>
<telephone>2236</telephone>
<created_on>2013-01-04 04:38:05</created_on>
<atom:link <a href="http://www.narola.co/remindz/reminders/43"></a> />
</user>
我曾使用过以下代码,但由于数据纯粹是xml,我无法解析它。
DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document parse = newDocumentBuilder.parse(new ByteArrayInputStream(result.getBytes()));
Log.d("result",parse.getChildNodes().toString());
谢谢你的推荐。
答案 0 :(得分:0)
使用xml解析技术,例如XmlPullParser
,SAX parser
或DOM parser
。
XML Pull解析器是开发人员在android Here站点中推荐的解析器,是Pull解析器的教程。
答案 1 :(得分:0)
首先,您必须从收到的文本块中提取正确的XML。
这取决于两个操作:
此任务可以通过使用正则表达式预先处理原始文本来执行。在您的情况下,可以使用这些表达式。
public class XMLTest {
static String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "\n" + " Info: POST /Remindz_api/user/loginHTTP/1.1\n"
+ " Host: www.narola.co \n" + " Accept: www.narola.co.beepz.api+xml\n" + " HTTP 1.1 200 OK \n"
+ " Content-Type: www.narola.co.beepz.api+xml;\n" + " Allow : GET,POST\n" + "\n" + " <user id=\"43\">\n"
+ " <firstname>Dfdf</firstname>\n" + " <lasttname>p2</lasttname>\n" + " <email>p</email>\n"
+ " <telephone>2236</telephone>\n" + " <created_on>2013-01-04 04:38:05</created_on>\n"
+ " <atom:link <a href=\"http://www.narola.co/remindz/reminders/43\"></a> />\n" + " </user>";
public static void main(final String[] args) {
/*
* This strips off "Param:Value"-style lines
*/
String xmlData = data.replaceAll(" *[a-z\\-A-Z]* *:[^<]*\n", "");
/*
* This strips off "HTTP line"
*/
xmlData = xmlData.replaceAll(" *HTTP .*\n", "");
/*
* Correct atom:link format
*/
xmlData = xmlData.replaceAll("<atom:link (.*) />", "<atom:link>$1</atom:link>");
try {
DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = newDocumentBuilder.parse(new ByteArrayInputStream(xmlData.getBytes("UTF-8")));
Element elem = doc.getDocumentElement();
dump("", elem);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void dump(final String pad, final Node node)
{
System.out.println(pad + node.toString());
if(node.getChildNodes() != null)
{
for(int i=0; i< node.getChildNodes().getLength();i++)
{
dump(pad + " ", node.getChildNodes().item(i));
}
}
}
结果文本是一个完美的有效XML,无法提供给DOM解析器:
<?xml version="1.0" encoding="UTF-8"?>
<user id="43">
<firstname>Dfdf</firstname>
<lasttname>p2</lasttname>
<email>p</email>
<telephone>2236</telephone>
<created_on>2013-01-04 04:38:05</created_on>
<atom:link><a href="http://www.narola.co/remindz/reminders/43"></a></atom:link>
</user>