java - SAX XML解析添加参数

标签 java android parsing

我对使用 SAX 进行解析很陌生。我设法使用此代码来获取返回的 xml 并将其绑定(bind)到我的 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 url 上传递参数。因为我的 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);

最佳答案

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了解更多详情。

关于java - SAX XML解析添加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12970401/

相关文章:

c++ - boost::spirit:导致匹配失败与来自语义操作的特定消息?

java - 通过Java解决统计概率问题?

java - Android XML 上的图像和 TextView 错误

java - 如何用java找到图的中心(顶点,与每个其他顶点相连,但边指向图的中心)

java - 有没有办法在构建 fragment 后调用方法?

android - 即使捕获到异常,应用程序也会崩溃

java - 如何从 Java 打开文件? (具体来说是一个.bat文件)

android - 忽略 gradle beta 依赖项

ios - 需要过滤来自 URL 的结果

java - 使用 SAX 解析具有未知数量递归的 XML 结构