2016-03-29 4 views
0

Итак, у меня есть класс XmlReader, который способен загружать и возвращать список лиц типа Клиента (который определяется мной), из файла XML. Но у меня также может быть xml-файл с объектами типа «Movie» или любым другим типом, и я хочу, чтобы мой XmlReader мог читать и извлекать это из файла. Я слышал что-то, что отражение можно было бы использовать в порядке сделать общий XmlReader класс, но я не знаю, как это сделать .. может ли кто-нибудь мне помочь? Заранее спасибо! Мой код для класса XmlReader является:Java: общий читатель XML с помощью отражения

public class XmlReader<ID, T extends MyObject<ID>> 
{ 
    private String fileName; 

    public XmlReader(String fileName) 
    { 
     this.fileName = fileName; 
    } 

    public List<Client> loadEntities() 
    { 
     List<Client> entities = new ArrayList<>(); 
     XmlHelper docXml = new XmlHelper(); 
     Document document = docXml.loadDocument(this.fileName); 
     document.getDocumentElement().normalize(); 
     Element root = document.getDocumentElement(); 
     NodeList clientElements = root.getElementsByTagName("field"); 
     int id=-1; 
     String name=""; 
     for (int i=0; i < clientElements.getLength(); i++) 
     { 
      Node clientElement = clientElements.item(i); 
      Element el = (Element) clientElement; 
      if (clientElement.getNodeType() != Node.ELEMENT_NODE) 
      { 
       // ignoring element due to wrong node type 
       continue; 
      } 
      if (el.hasAttribute("name") && el.getAttribute("name").equals("id")) 
      { 
       id = Integer.parseInt(el.getAttribute("value")); 
      } 
      if (el.hasAttribute("name") && el.getAttribute("name").equals("name")) 
      { 
       name = el.getAttribute("value"); 
      } 
      if (i % 2 ==1) 
      { 
       Client newClient = new Client(id, name); 
       entities.add(newClient); 
      } 
      } 
     return entities; 
    } 
} 

И файл XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Clients> 
     <entity class="class Domain.Client"> 
      <field name="name" type="class java.lang.String" value="Liviu"/> 
      <field name="id" type="class java.lang.Object" value="1"/> 
     </entity> 
</Clients> 

ответ

0

Если вы извлекаете имя класса из вашего XML вы могли бы сделать что-то вроде:

String className = ... // extract your class name into this 
YourClass c = (YourClass) Class.forName(className).newInstance();