Home | History | Annotate | Download | only in dom
      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
     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
     31   public boolean accept(String fileName) {
     32     return fileName.endsWith(".xml");
     33   }
     34 
     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