Search code examples
xmlblackberryfile-ioread-write

read/write and create local xml file


i have one xml name 1.xmllike that

<?xml version="1.0" encoding="utf-8"?>
<domains>
<domain url="www.google.com" id="123"/>
<domain url="www.yahoo.com" id="123"/></domains>

Now i want to read this xmlfile. i have put this xml in res>xml folder. How can i read this xml file ? in addition i want to add new some new url in this xml ? so is it possible programmatically ?


Solution

  • For reading values from XML file in res folder, Use the following code-

    try {
        String jsPath = "1.xml"; 
        InputStream input = getClass().getResourceAsStream(jsPath);
        byte [] content = IOUtilities.streamToBytes(input); 
        String contentAsString = new String(content);
        //Dialog.alert(contentAsString);
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        XMLDOMUtil xml = new XMLDOMUtil();
        ByteArrayInputStream bis = new ByteArrayInputStream(contentAsString.getBytes("UTF-8"));
        Document document = builder.parse(bis);
        NodeList listOfPersons = document.getElementsByTagName("domains");
        NodeList listOfPersons1 = document.getElementsByTagName("domain");
        //int totalPersons = listOfPersons1.getLength();
       // Dialog.alert(totalPersons+"");
        for(int s=0; s<listOfPersons1.getLength() ; s++)
            {
            Node firstPersonNode = listOfPersons1.item(s);
            Element firstPersonElement = (Element)firstPersonNode;
            Dialog.alert(firstPersonElement.getAttribute( "url")+"---"+firstPersonElement.getAttribute( "id" ));
            }
    
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    XMLDOMUtil.java is given below-

    public class XMLDOMUtil {
            // go thru the list of childs and find the text associated by the tag
            public String getNodeTextByTag(Node parentNode, String name) {
                    Node node = parentNode.getFirstChild();
                    Text text = null;
                    String retStr = null;
                    try {
                            while (node != null) {
                                    if (node.getNodeName().equals(name)) {
                                            text = (Text) node.getFirstChild();
                                            retStr = text.getData();
                                            break;
                                    }
                                    node = node.getNextSibling();
                            }
                    } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    }
                    return retStr;
            }
            public Node getNodeByTag(Node parentNode, String name) {
                    Node node = parentNode.getFirstChild();
                    Node retNode = null;
                    while (node != null) {
                            if (node.getNodeName().equals(name)) {
                                    retNode = node;
                                    break;
                            }
                            node = node.getNextSibling();
                    }
                    return retNode;
            }
            public Node getNextSiblingNodeByTag(Node siblingNode, String name) {
                    Node retNode = null;
                    siblingNode = siblingNode.getNextSibling();
                    while (siblingNode != null) {
                            if (siblingNode.getNodeName().equals(name)) {
                                    retNode = siblingNode;
                                    break;
                            }
                            siblingNode = siblingNode.getNextSibling();
                    }
                    return retNode;
            }
    }