package org.ovirt.engine.core.compat.backendcompat; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.ovirt.engine.core.compat.CompatException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class XmlDocument { public Object NameTable; public String OuterXml; public XmlNode[] ChildNodes; private Document doc; public void LoadXml(String ovfstring) { try { // load doc DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); fact.setNamespaceAware(true); DocumentBuilder builder = fact.newDocumentBuilder(); doc = builder.parse(new InputSource(new StringReader(ovfstring))); // initialize all the child nodes NodeList list = doc.getElementsByTagName("*"); ChildNodes = new XmlNode[list.getLength()]; for (int i = 0; i < list.getLength(); i++) { ChildNodes[i] = new XmlNode(list.item(i)); } OuterXml = ovfstring; } catch (Exception e) { CompatException ce = new CompatException(e.getMessage(), e.getCause()); throw ce; } } public XmlNode SelectSingleNode(String string) { try { XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); Object o = xPath.evaluate(string, doc, XPathConstants.NODE); return new XmlNode((Node) o); } catch (XPathExpressionException e) { throw new RuntimeException("Failed to evaluate xpath: " + string, e); } } public XmlNode SelectSingleNode(String string, XmlNamespaceManager _xmlns) { try { XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); xPath.setNamespaceContext(_xmlns); Object o = xPath.evaluate(string, doc, XPathConstants.NODE); return new XmlNode((Node) o); } catch (XPathExpressionException e) { throw new RuntimeException("Failed to evaluate xpath: " + string, e); } } public XmlNodeList SelectNodes(String string) { try { XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); Object o = xPath.evaluate(string, doc, XPathConstants.NODESET); return new XmlNodeList((NodeList) o); } catch (XPathExpressionException e) { throw new RuntimeException("Failed to evaluate xpath: " + string, e); } } public XmlNodeList SelectNodes(String string, XmlNamespaceManager _xmlns) { try { XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); xPath.setNamespaceContext(_xmlns); Object o = xPath.evaluate(string, doc, XPathConstants.NODESET); return new XmlNodeList((NodeList) o); } catch (XPathExpressionException e) { throw new RuntimeException("Failed to evaluate xpath: " + string, e); } } public void Load(String filename) { InputStream is = null; try { is = new FileInputStream(filename); BufferedReader r = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line; while (null != (line = r.readLine())) { buffer.append(line); buffer.append("\n"); } LoadXml(buffer.toString()); } catch (IOException e) { throw new RuntimeException("Failed to load file: " + filename, e); } finally { if(is != null) { try { is.close(); } catch (IOException e) { //ignore } } } } }