2

こんにちは、サーバーに保存されている xml をブラックベリーで解析しようとしています。しかし、それはさまざまな例外を伴う入力ストリーム行に出てきます。ほとんどの場合、データグラム プロトコルと TcpInput の例外があります。コードをここに添付しました。

try {
    Document doc;
    StreamConnection conn = null;
    InputStream is = null;
    conn = (StreamConnection) Connector.open("http://xyz.com/GetImageDetails.xml;deviceside=true;");

    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    docBuilderFactory.setIgnoringElementContentWhitespace(true);
    docBuilderFactory.setCoalescing(true);

    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    docBuilder.isValidating();
    is = conn.openInputStream();
    doc = docBuilder.parse(is);
    doc.getDocumentElement().normalize();

    NodeList list = doc.getElementsByTagName("IMG_URL");
    for (int i = 0; i < list.getLength(); i++) {
        Node textNode = list.item(i).getFirstChild();
        System.out.println(textNode);
    }
} catch (Exception e) {
    System.out.println(e.toString());
}
4

2 に答える 2

2
The XML parsing class is
/***/

パッケージcom.application.xmlParser;

java.io.ByteArrayInputStream をインポートします。java.io.InputStream をインポートします。java.util.Hashtable をインポートします。java.util.Vector をインポートします。

org.xml.sax.Attributes をインポートします。org.xml.sax.InputSource をインポートします。import org.xml.sax.SAXException; org.xml.sax.XMLReader をインポートします。org.xml.sax.helpers.DefaultHandler をインポートします。org.xml.sax.helpers.XMLReaderFactory をインポートします。

com.application.log.Log をインポートします。

public class CopyOfXMLParser extends DefaultHandler {

private String RecordElement;
private String xmlURL;
private Hashtable newObj = new Hashtable();
private Vector Records = new Vector();
private CallBack callBack ;
private String _localEndTag = "";

public void ParseInputStream(String stream,String rootElement, String recordElement , CallBack callBack) 
{
    RecordElement = recordElement;
    this.callBack = callBack;

    InputStream in = new ByteArrayInputStream(stream.getBytes());
    try 
    {
        XMLReader reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(this);
        reader.parse(new InputSource(in));
    } 
    catch ( Exception e ) 
    {
        System.out.println("#### ##### Parse Exception : " + e + "#### #####" + xmlURL);
      /*  callbackAdapter.callback(Records);*/
    }
}


public void startElement(String Uri, String localName, String qName, Attributes attributes) throws SAXException 
{
}

public void characters(char [ ] ch, int start, int length) throws SAXException 
{
   String elementValue = new String(ch, start, length).trim();

    Log.d("End Tag", _localEndTag); 
    Log.d("Tag Value ", elementValue);  

    if(_localEndTag ==  null || _localEndTag.equalsIgnoreCase(""))
    {

    }
    else
    {
        newObj.put((String)_localEndTag, (String)elementValue);
    }
}

public void endElement(String Uri, String localName, String qName) throws SAXException 
{
    _localEndTag = localName;

    if ( localName.equalsIgnoreCase(RecordElement) ) 
    {
        Records.addElement(newObj);
        callBack.callBack(Records);
        System.out.println("###### ###### FINISH ###### ######" +RecordElement);
    }
}

}

/***/

/***/
How to Implement

take the (Http)InputStream response into String  and call the below method ..your problem is solved 

new CopyOfXMLParser().ParseInputStream(new String(baos.toByteArray()) ,"SOAP:Envelope", "SOAP:Envelope");

このコードですべての要素 value を取得しています / * /

于 2012-10-04T11:06:19.540 に答える
0

XML 解析には Sax 解析を使用します。このリンクを参照してください: http://stackoverflow.com/questions/11901822/xml-parsing-using-sax-for-blackberry/11914662#11914662

于 2012-10-05T05:11:10.117 に答える