Не удается получить информацию XML в Java

1

Я пытаюсь получить некоторую информацию из XML файла, но возвращает мне нулевой объект. Я использую DOM для анализа файла (см. Ниже код). Мне нужна помощь, потому что я не знаю, плохо ли это моя логика или мой код. Спасибо за ваше время !

public class ReadXMLFile {
private File fXmlFile;
private Document doc;
private Contact m_contact=null;

public ReadXMLFile(String name){
    try{
        m_contact = new Contact();
        fXmlFile = new File("/pathtofile/"+name+".xml"); //should be verified
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        doc = dBuilder.parse(fXmlFile);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

public boolean readXml(String _id){
    try{
        doc.getDocumentElement().normalize();

        if(doc.getDocumentElement().getNodeName().equalsIgnoreCase("listContact")){
            NodeList nList = doc.getElementsByTagName("contact");
            Node nNode;

              nNode = nList.item(Integer.parseInt(_id));
              if (nNode.getNodeName().equalsIgnoreCase("contact")){
                  if(nNode.getNodeType() == Node.ELEMENT_NODE){
                      System.out.println("\nCurrent Element :" + nNode.getNodeName());
                      Element eElement = (Element)nNode;//get element of node
                      m_contact.setId(Integer.parseInt(eElement.getAttribute("id")));
                      m_contact.setPhoneNumber(eElement.getAttribute("phoneNumber"));
                      m_contact.setName(eElement.getAttribute("name"));
                      m_contact.setFistName(eElement.getAttribute("firstName"));
                      return true;
                    }  
              }
        }
        return false;
    }
    catch(Exception e){
        e.printStackTrace();
        return false;
    }
}

public Contact getM_contact() {
    if(m_contact!=null){
        return m_contact;
    }
    else
        return null;
}

Это мой xml результат:

<listContact>
  <contact id="0">
    <firstName>martin</firstName>
    <lastName>dupond</lastName>
    <phoneNumber>514</phoneNumber>
    <synchronize>false</synchronize>
  </contact>
</listContact>

вывод:

Contact{id=0, phoneNumber=, name=, fistName=, synchronize=false}
Теги:

2 ответа

1
Лучший ответ

Попробуйте это, я попробовал, и это сработало для меня

Node nNode = nList.item(Integer.parseInt(temp));

    System.out.println("\nCurrent Element :" + nNode.getNodeName());

    if (nNode.getNodeType() == Node.ELEMENT_NODE) {

        Element eElement = (Element) nNode;

        System.out.println("First Name : " + eElement.getElementsByTagName("firstName").item(0).getTextContent());
        System.out.println("Last Name : " + eElement.getElementsByTagName("lastName").item(0).getTextContent());
        System.out.println("Nick Name : " + eElement.getElementsByTagName("phoneNumber").item(0).getTextContent());

    }
return false;
....
  • 0
    Да, это работает, спасибо!
2

Вы используете getAttribute в элементе contact для извлечения значений для firstName т.д., Но в вашем XML это не атрибуты, а дочерние элементы.

Если вы используете JDOM API, вы можете просто использовать метод getChild(name). В "стандартном" DOM API вам нужно пройти еще несколько обручей, но вот что-то вроде этого:

  Element eElement = (Element)nNode;

  // only one first name element
  Element firstNameElem = eElement.getElementsByTagName("firstName").item(0); 
  m_contact.setFistName(firstNameElem.getNodeValue());
  • 0
    У меня нет этого метода с моим объектом Element. У меня есть getChildNodes, но это не так.
  • 0
    Извините, я предполагал, что вы использовали JDOM. В этом случае вам нужно будет использовать getElementsByTagName(name) и обработать полученный NodeList . Я обновлю свой ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню