Vishnu
Vishnu

Reputation: 176

Reading tags dynamically using SAX parser

I am trying to read the XML dynamically using the SAX parser, I have tried using this example but in this, I have to hardcode (create a variable) for all the subtag, please suggest if there is any feature available in SAX for this.

Sample XML:

<cloudHubDeployment>
                    <uri>https://anypoint.mulesoft.com</uri>
                    <muleVersion>${muleVersion}</muleVersion>
                    <username>${username}</username>
                    <password>${password}</password>
                    <properties>
                        <env>${env}</env>
                    </properties>
</cloudHubDeployment>

My requirement is to read all the subtag and their subsequent values inside

Upvotes: 0

Views: 370

Answers (1)

Lakshan
Lakshan

Reputation: 1436

try with following solution,

try {
    File inputFile = new File("Input.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document document = dBuilder.parse(inputFile);
    document.getDocumentElement().normalize();
    Element rootElement = document.getDocumentElement(); // gets the document's root element (cloudHubDeployment)
    NodeList nodeList = rootElement.getElementsByTagName("*"); // get all child elements under the root (cloudHubDeployment) element
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            System.out.println("Element Name : "+node.getNodeName()+", "
            + "Value : "+element.getTextContent().trim());
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}

output,

Element Name : uri, Value : https://anypoint.mulesoft.com
Element Name : muleVersion, Value : ${muleVersion}
Element Name : username, Value : ${username}
Element Name : password, Value : ${password}
Element Name : properties, Value : ${env}
Element Name : env, Value : ${env}

collect all elements and values in xml file,

NodeList nodeList = document.getElementsByTagName("*");
for (int temp = 0; temp < nodeList.getLength(); temp++) {
    Node node = nodeList.item(temp);
    if (node.getNodeType() == Node.ELEMENT_NODE) {
        Element element = (Element) node;
        System.out.println("Element Name : "+node.getNodeName()+", "
        + "Value : "+element.getTextContent().trim());
    }
}

Upvotes: 1

Related Questions