Reputation: 176
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
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