SAX XML解析添加参数

时间:2012-10-19 08:39:20

标签: java android parsing

我是使用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);

2 个答案:

答案 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