If the XML is well formed then you can convert it to Document. By using the XPath you can get the XML Elements.
String xml = "<stackusers><name>Yash</name><age>30</age></stackusers>";
Form XML-String Create Document and find the elements using its XML-Path.
Document doc = getDocument(xml, true); public static Document getDocument(String xmlData, boolean isXMLData) throws Exception { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); dbFactory.setIgnoringComments(true); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc; if (isXMLData) { InputSource ips = new org.xml.sax.InputSource(new StringReader(xmlData)); doc = dBuilder.parse(ips); } else { doc = dBuilder.parse( new File(xmlData) ); } return doc; }
Use org.apache.xpath.XPathAPI to get Node or NodeList.
System.out.println("XPathAPI:"+getNodeValue(doc, "/stackusers/age/text()")); NodeList nodeList = getNodeList(doc, "/stackusers"); System.out.println("XPathAPI NodeList:"+ getXmlContentAsString(nodeList)); System.out.println("XPathAPI NodeList:"+ getXmlContentAsString(nodeList.item(0))); public static String getNodeValue(Document doc, String xpathExpression) throws Exception { Node node = org.apache.xpath.XPathAPI.selectSingleNode(doc, xpathExpression); String nodeValue = node.getNodeValue(); return nodeValue; } public static NodeList getNodeList(Document doc, String xpathExpression) throws Exception { NodeList result = org.apache.xpath.XPathAPI.selectNodeList(doc, xpathExpression); return result; }
Using javax.xml.xpath.XPathFactory
System.out.println("javax.xml.xpath.XPathFactory:"+getXPathFactoryValue(doc, "/stackusers/age")); static XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath(); public static String getXPathFactoryValue(Document doc, String xpathExpression) throws XPathExpressionException, TransformerException, IOException { Node node = (Node) xpath.evaluate(xpathExpression, doc, XPathConstants.NODE); String nodeStr = getXmlContentAsString(node); return nodeStr; }
Using Document Element.
System.out.println("DocumentElementText:"+getDocumentElementText(doc, "age")); public static String getDocumentElementText(Document doc, String elementName) { return doc.getElementsByTagName(elementName).item(0).getTextContent(); }
Get value in between two strings.
String nodeVlaue = org.apache.commons.lang.StringUtils.substringBetween(xml, "<age>", "</age>"); System.out.println("StringUtils.substringBetween():"+nodeVlaue);
Full Example:
public static void main(String[] args) throws Exception { String xml = "<stackusers><name>Yash</name><age>30</age></stackusers>"; Document doc = getDocument(xml, true); String nodeVlaue = org.apache.commons.lang.StringUtils.substringBetween(xml, "<age>", "</age>"); System.out.println("StringUtils.substringBetween():"+nodeVlaue); System.out.println("DocumentElementText:"+getDocumentElementText(doc, "age")); System.out.println("javax.xml.xpath.XPathFactory:"+getXPathFactoryValue(doc, "/stackusers/age")); System.out.println("XPathAPI:"+getNodeValue(doc, "/stackusers/age/text()")); NodeList nodeList = getNodeList(doc, "/stackusers"); System.out.println("XPathAPI NodeList:"+ getXmlContentAsString(nodeList)); System.out.println("XPathAPI NodeList:"+ getXmlContentAsString(nodeList.item(0))); } public static String getXmlContentAsString(Node node) throws TransformerException, IOException { StringBuilder stringBuilder = new StringBuilder(); NodeList childNodes = node.getChildNodes(); int length = childNodes.getLength(); for (int i = 0; i < length; i++) { stringBuilder.append( toString(childNodes.item(i), true) ); } return stringBuilder.toString(); }
OutPut:
StringUtils.substringBetween():30 DocumentElementText:30 javax.xml.xpath.XPathFactory:30 XPathAPI:30 XPathAPI NodeList:<stackusers> <name>Yash</name> <age>30</age> </stackusers> XPathAPI NodeList:<name>Yash</name><age>30</age>