解析Android上的XML [英] Parse XML on Android
问题描述
我想在Android应用程序使用API为我们的计费系统,但我有麻烦找出如何解析它返回的XML。这里是我的功能看起来像迄今...
公共无效ParseData(字符串XMLDATA)
{
尝试
{
//文件生成器
工厂的DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
的DocumentBuilder分贝= factory.newDocumentBuilder(); //输入流
InputSource的inStream中=新的InputSource();
inStream.setCharacterStream(新StringReader(XMLDATA)); //解析文档转换为节点列表
文档的DOC = db.parse(插播广告);
节点列表节点= doc.getElementsByTagName(准考证); //循环节点列表和检索元素数据
的for(int i = 0; I< nodes.getLength();我++)
{
节点node = nodes.item(ⅰ); 如果(节点的instanceof元)
{
子元素=(元素)节点;
字符串ID = child.getAttribute(ID);
}
}
}
赶上(SAXException的E)
{ }
}
和这里是XML数据的样子时返回。我需要遍历各拉各的元素,但我找不出如何做到这一点的DOM解析器。
< whmcsapi>
<作用> gettickets< /作用>
<&结果GT;成功与LT; /&结果GT;
&所述;使用totalResults→1&下; /使用totalResults>
&所述; startnumber大于0&下; / startnumber>
&所述; numreturned→1&下; / numreturned>
<门票>
<门票>
< ID> 1 LT; / ID>
<&TID GT; 557168< / TID>
&所述; DEPTID→1&下; / DEPTID>
<用户id> 1 LT; /用户用户名与GT;
<名称><![CDATA [阵列]>< /名称>
<电子邮件和GT;< /电子邮件>
< CC>< / CC>
&所述c取代; TmDEga5v&下; / c取代;
<日期和GT; 2009-08-03 23:14:32< /日期和GT;
<个体GT;<![CDATA [测试票务]>< /受试者GT;
<&消息GT;<![CDATA [这是一个测试票> ----------------------------
IP地址:xxx.xxx.xxx.xxx]>< /消息>
<状态>&开放LT; /状态>
<优先>中< /优先级>
<管理>< /管理>
<&附件GT;< /附件>
< lastreply> 2009-08-04 12:14:18< / lastreply>
<旗> 0℃; /标志>
<服务与GT;< /服务>
< /票务>
< /票>
< / whmcsapi>
下面是最真棒的答案和解决方案,以XML解析的问题之一。
非常详细,并总是惊人的屋大维写得很好:<一href=\"http://stackoverflow.com/questions/4827344/how-to-parse-xml-using-the-sax-parser/4828765#4828765\">here
I am trying to use the API for our billing system in an Android Application, but I am having trouble figuring out how to parse the XML that it returns. Here is what my function looks like thus far...
public void ParseData(String xmlData)
{
try
{
// Document Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
// Input Stream
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(xmlData));
// Parse Document into a NodeList
Document doc = db.parse(inStream);
NodeList nodes = doc.getElementsByTagName("ticket");
// Loop NodeList and Retrieve Element Data
for(int i = 0; i < nodes.getLength(); i++)
{
Node node = nodes.item(i);
if (node instanceof Element)
{
Element child = (Element)node;
String id = child.getAttribute("id");
}
}
}
catch(SAXException e)
{
}
}
and here is what the XML data looks like that is returned. I need to loop through each and pull each element out, but I cant figure out how to do that with the DOM parser.
<whmcsapi>
<action>gettickets</action>
<result>success</result>
<totalresults>1</totalresults>
<startnumber>0</startnumber>
<numreturned>1</numreturned>
<tickets>
<ticket>
<id>1</id>
<tid>557168</tid>
<deptid>1</deptid>
<userid>1</userid>
<name><![CDATA[Array]]></name>
<email></email>
<cc></cc>
<c>TmDEga5v</c>
<date>2009-08-03 23:14:32</date>
<subject><![CDATA[Test Ticket]]></subject>
<message><![CDATA[This is a test ticket>
----------------------------
IP Address: xxx.xxx.xxx.xxx]]></message>
<status>Open</status>
<priority>Medium</priority>
<admin></admin>
<attachment></attachment>
<lastreply>2009-08-04 12:14:18</lastreply>
<flag>0</flag>
<service></service>
</ticket>
</tickets>
</whmcsapi>
Here's one of the most awesome answer and solution to XML parsing issues.
Quite detailed and very well written by always amazing Octavian : here
这篇关于解析Android上的XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!