我是使用SAX解析的新手。我设法使用此代码获取返回的xml并将其绑定在我的getter setter上。
我的代码:
try {
/**
* Create a new instance of the SAX parser
**/
SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();
URL url = new URL(""); // URL of the XML
/**
* Create the Handler to handle each of the XML tags.
**/
XMLHandler myXMLHandler = new XMLHandler();
xmlR.setContentHandler(myXMLHandler);
xmlR.parse(new InputSource(url.openStream()));
} catch (Exception e) {
System.out.println(e);
}
data = XMLHandler.data;
现在我的问题是,如何在我的php网址上传递参数。我的PHP文件的原因我需要一些数据,以便我可以验证它是否有效。
假设我需要手机上登录人的用户名?
在DOM方法上我可以做这样的事情
XMLParser parser2 = new XMLParser();
parser2.getXmlFromUrl(URL_FBFRIEND);
//HTTP POST
String url_Getmembermob= URL_FBFRIEND ;
//String xml_getMembermob=null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url_Getmembermob);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("blah", "blah"));
nameValuePairs.add(new BasicNameValuePair("blah", "blah"));
nameValuePairs.add(new BasicNameValuePair("blah", "blah"));
nameValuePairs.add(new BasicNameValuePair("blah", "blah"));
//Log.i("nameValuePairs", "nameValuePairs=" + nameValuePairs);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpclient.execute(httppost);
HttpEntity httpEntity = httpResponse.getEntity();
FBFRIENDS = EntityUtils.toString(httpEntity);
答案 0 :(得分:1)
继续使用HttpClient,而不是使用URL对象。使用HttpResponse.getInputStream()方法。
XMLHandler myXMLHandler = new XMLHandler();
xmlR.setContentHandler(myXMLHandler);
xmlR.parse(httpResponse.getInputStream());
答案 1 :(得分:1)
SAX是一个推送解析器。这意味着它会遍历XML文档,根据它生成事件并推送它们以供您处理。它不会像DOM那样创建对象树。但它可以帮助您创建自定义对象或您选择的对象层次结构,而内存占用更少。
生成的SAX事件可能就像“呃!哦!我刚刚点击一个元素开放标签”,“好吧!我已经点击属性”或“字符!亲爱的上帝,我找到了一个文本值” 。通常为正在解析的XML文档中找到的每个XML构造生成一个事件,但并不是所有这些都需要处理。处理的内容由处理程序的实现指定(在您的示例中使用setContentHandler(myXMLHandler)
设置)。
为了获取特定的XML内容,您需要实现或使用特定处理程序的实现。您的示例使用名为XMLHandler
的实现。我不知道你自己是否实现了它,或者它只是一些默认实现。从它的外观来看,它只是将XML文档的整个内容复制到一个String成员中,这实际上并不是你想用SAX做的(DOM会为你做得更好)。
您现在需要做的是通过实现处理程序来创建包含所需数据的对象。这是一个例子(而不仅仅是打印东西,你应该按照你认为合适的方式构建对象):
public class DummyHandler extends DefaultHandler{
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
System.out.println("characters! dear god, I've located a text value");
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
super.endElement(uri, localName, name);
System.out.println("an element was ended. may it R.I.P. o7");
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, name, attributes);
System.out.println("uh! oh! I've just hit an element openening tag");
}
}
有关详细信息,请参阅here。