2014-09-01 4 views
0

По какой-то причине я хочу, чтобы иметь возможность читать Свойства в моем конфигурационном файле спящего режима, скажем, например, мне нужно знать, какой диалект используется или какой класс драйвера базы данных. Я попытался сделать это путем разбора XML Но я не получаю мимо атрибутов:Прочитайте Свойства в файле конфигурации спящего режима

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.DocumentBuilder; 
import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Node; 
import org.w3c.dom.Element; 
import java.io.IOException; 
import java.io.InputStream; 
import javax.xml.parsers.ParserConfigurationException; 
import org.xml.sax.SAXException; 

/** 
* 
* @author User 
*/ 
public class XmlParser { 

    public XmlParser() { 
    } 

    public void readXml() throws SAXException, IOException, ParserConfigurationException { 
     InputStream in = this.getClass().getResourceAsStream("/hibernate.cfg.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(in); 
     doc.getDocumentElement().normalize(); 
     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
     NodeList nList = doc.getElementsByTagName("property"); 
     System.out.println("----------------------------"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Node nNode = nList.item(temp); 
      System.out.println("\nCurrent Element :" + nNode.getNodeName()); 
      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
       Element eElement = (Element) nNode; 
       System.out.println("Driver : " + eElement.getAttribute("name")); 
       System.out.println("Not Sure : " + eElement.getElementsByTagName("hibernate.connection.url").item(0).getTextContent()); 
       System.out.println(eElement.getElementsByTagNameNS("name", "hibernate.dialect").item(0).getTextContent()); 

      } 
     } 
    } 
} 

Мой результат:

Root element :hibernate-configuration 
---------------------------- 

Current Element :property 
Driver : hibernate.dialect 
null 

Мне нужно, чтобы иметь возможность получить свойство значения в любое время в мое заявление. Есть ли другой способ или что мне не хватает в этом методе?

ответ

1

вы можете попробовать с этим

Configuration hibernateConfiguration = new Configuration().configure(new File("/hibernate.cfg.xml")); 
String url = configuration.getProperty("hibernate.connection.url"); 

Как это, вы можете получить все свойства, установите тот же где-то в статическом HashMap и использовать в вашем приложении.

+0

@Stanley делает ответ помогает –

0

Вы можете использовать SAXReader разобрать файл, вот код:

import java.io.InputStream; 
import java.util.Iterator; 

import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.Element; 
import org.dom4j.io.SAXReader; 

public class ReadXMLFile { 

    public static void main(String argv[]) throws DocumentException { 
     new ReadXMLFile().readMyXML(); 
    } 

    private void readMyXML() throws DocumentException { 
     InputStream in = this.getClass().getResourceAsStream(
       "/hibernate.cfg.xml"); 
     Document document = new SAXReader().read(in); 
     Element root = document.getRootElement(); 
     System.out.println("Root element : " + root.getName()); 
     Element sfNode = document.getRootElement().element("session-factory"); 
     Iterator<Element> itr = sfNode.elementIterator("property"); 
     System.out.println("----------Properties-----------"); 
     while (itr.hasNext()) { 
      Element node = itr.next(); 
      String name = node.attributeValue("name"); 
      String value = node.getText().trim(); 
      System.out.println(name + " = " + value); 
     } 
    } 
} 
Смежные вопросы