2

私はSAXを使用したこの解析に不慣れです。私はこのコードを使用して、返されたxmlを取得し、それをゲッターセッターにバインドすることができました。

私のコード:

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;

今私の質問は、どうすれば私のphpURLにパラメータを渡すことができるかということです。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);
4

2 に答える 2

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");
    }
}

詳細については、こちらをご覧ください。

于 2012-10-19T13:57:30.657 に答える
1

URLオブジェクトを使用する代わりに、HttpClientを使用し続けます。HttpResponse.getInputStream()メソッドを使用します。

XMLHandler myXMLHandler = new XMLHandler();
xmlR.setContentHandler(myXMLHandler);
xmlR.parse(httpResponse.getInputStream());
于 2012-10-19T13:55:38.550 に答える