1 package org.testng.xml.dom; 2 3 import org.testng.xml.ISuiteParser; 4 import org.testng.xml.XMLParser; 5 import org.testng.xml.XmlSuite; 6 import org.w3c.dom.Document; 7 import org.xml.sax.SAXException; 8 9 import javax.xml.parsers.DocumentBuilder; 10 import javax.xml.parsers.DocumentBuilderFactory; 11 import javax.xml.parsers.ParserConfigurationException; 12 import javax.xml.xpath.XPathExpressionException; 13 14 import java.io.IOException; 15 import java.io.InputStream; 16 17 public class DomXmlParser extends XMLParser<XmlSuite> implements ISuiteParser { 18 @Override parse(String currentFile, InputStream inputStream, boolean loadClasses)19 public XmlSuite parse(String currentFile, InputStream inputStream, boolean loadClasses) { 20 XmlSuite result = null; 21 try { 22 result = parse2(currentFile, inputStream, loadClasses); 23 } catch (Exception e) { 24 e.printStackTrace(); 25 } 26 27 return result; 28 } 29 30 @Override accept(String fileName)31 public boolean accept(String fileName) { 32 return fileName.endsWith(".xml"); 33 } 34 parse2(String currentFile, InputStream inputStream, boolean loadClasses)35 public XmlSuite parse2(String currentFile, InputStream inputStream, 36 boolean loadClasses) throws ParserConfigurationException, SAXException, 37 IOException, XPathExpressionException { 38 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 39 factory.setNamespaceAware(true); // never forget this! 40 DocumentBuilder builder = factory.newDocumentBuilder(); 41 Document doc = builder.parse(inputStream); 42 43 DomUtil xpu = new DomUtil(doc); 44 XmlSuite result = new XmlSuite(); 45 xpu.populate(result); 46 // XPathFactory xpathFactory = XPathFactory.newInstance(); 47 // XPath xpath = xpathFactory.newXPath(); 48 // 49 // { 50 // XPathExpression expr = xpath.compile("//suite"); 51 // Object result = expr.evaluate(doc, XPathConstants.NODESET); 52 // NodeList nodes = (NodeList) result; 53 // for (int i = 0; i < nodes.getLength(); i++) { 54 // Node node = nodes.item(i); 55 // for (int j = 0; j < node.getAttributes().getLength(); j++) { 56 // System.out.println(node.getAttributes().item(j)); 57 // } 58 // } 59 // } 60 61 // { 62 // XPathExpression expr = xpath.compile("//suite/@name"); 63 // Object result = expr.evaluate(doc, XPathConstants.STRING); 64 // System.out.println("NAME:" + result); 65 // } 66 System.out.println(result.toXml()); 67 return result; 68 } 69 } 70