Put the node XML element and node text in a string array

Please help me put the nodes of elements and text in an array of String s.

For example, a .xml file has:

 <soap:Envelope> <soap:Body> <ser:getTitle> <!--Optional:--> <ser:title>Meeting</ser:title> </ser:getTitle> <ser:getDiscription> <!--Optional:--> <ser:discription>this is the meeting</ser:discription> </ser:getDiscription> ... </soap:Body> </soap:Envelop> 

Now I want to put the values ​​in String[] key, value as follows:

 key[0] = "title"; value[0] = "meeting"; key[1] = "discription"; value[1] = "this is the meeting"; 

... etc.

Thank you very much in advance!

+4
source share
1 answer

You can use the DOM to parse your input XML and use something like:

 import javax.xml.parsers.*; import org.w3c.dom.*; import java.io.File; public dumpXMLTags(...) { String[] keys; // you would need that with appropriate size initialized String[] values; // Parse your XML file and construct DOM tree File fXmlFile = new File(PATH_TO_YOUR_XML_FILE); DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); // Traverse DOM tree (make sure is not empty first, etc) NodeIterator iterator = traversal.createNodeIterator( doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true); int i = 0; // index to you key/value Array for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { keys[i] = ((Element) n).getTagName(); values[i] = ((Element)n).getNodeValue(); i++; } } 

Alternatively, you can use XPATH with

 //@* | //*[not(*)] 

as described here: Question 7199897

 public static void main(String[] args) throws Exception { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xml))); XPathFactory xpf = XPathFactory.newInstance(); XPath xp = xpf.newXPath(); NodeList nodes = (NodeList)xp.evaluate("//@* | //*[not(*)]", doc, XPathConstants.NODESET); System.out.println(nodes.getLength()); for (int i=0, len=nodes.getLength(); i<len; i++) { Node item = nodes.item(i); System.out.println(item.getNodeName() + " : " + item.getTextContent()); } } 
+1
source

All Articles