Обработка XML Dom - PullRequest
       1

Обработка XML Dom

0 голосов
/ 25 октября 2010

Я хочу изменить XML-файл, используя dom, но когда я делаю node.getNodeValue (); он возвращает ноль! Я не знаю почему? Мой XML-файл содержит следующие теги: [person] which contains child [name] which contains childs [firstname ,middleInitial ,lastName] childs

Я хочу обновить имя, отчество и фамилию, используя dom это мой файл обработки Java-дом:

    NodeList refPeopleList = doc.getElementsByTagName("person");</p>

<code>        for (int i = 0; i < refPeopleList.getLength(); i++) {

            NodeList personList = refPeopleList.item(i).getChildNodes();
            for (int personDetalisCnt = 0; personDetalisCnt < refPeopleList.getLength(); personDetalisCnt++) {
                {
                    currentNode = personList.item(personDetalisCnt);
                    String nodeName = currentNode.getNodeName();
                    System.out.println("node name is " + nodeName);
                    if (nodeName.equals("name")) {
                        System.out.println("indise name");
                         NodeList nameList = currentNode.getChildNodes();
                         for(int cnt=0;cnt<nameList.getLength();cnt++)
                         {
                             currentNode=nameList.item(cnt);
                             if(currentNode.getNodeName().equals("firstName"))
                             {
                                  System.out.println("MODIFID NAME :"+currentNode.getNodeValue()); //prints null
                                  System.out.println("indide fname"+" node name is "+currentNode.getNodeName()); //prints firstName
                                  String nodeValue="salma";
                                 currentNode.setNodeValue(nodeValue);
                                  System.out.println("MODIFID NAME :"+currentNode.getNodeValue());//prints null


                             }
                         }
                    }
                }
</code>

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Вместо вызова getNodeValue() / setNodeValue() на узле элемента <firstName> попробуйте получить дочерний текстовый узел элемента firstName и вызвать getNodeValue() / setNodeValue() для него.

Попробуйте

if(currentNode.getNodeName().equals("firstName"))
{
   Node textNode = currentNode.getFirstChild();
   System.out.println("Initial value:" + textNode.getNodeValue());
   String nodeValue="salma";
   textNode.setNodeValue(nodeValue);
   System.out.println("Modified value:" + textNode.getNodeValue());
}

Из спецификации DOM ,

Атрибуты nodeName, nodeValue и атрибуты включены в качестве механизма для получения информации об узле без перехода наконкретный производный интерфейс.В тех случаях, когда нет явного сопоставления этих атрибутов для определенного типа узла (например, nodeValue для элемента или атрибутов для комментария), возвращается null .

Аналогично в документации Java для интерфейса Node таблица в верхней части показывает, что значение nodeValue элемента равно нулю.

Именно поэтому использование getNodeValue для элемента приведет квсегда возвращайте ноль, и почему вам нужно сначала использовать getFirstChild (), чтобы получить текстовый узел (при условии, что нет других дочерних узлов).Если есть смесь дочерних узлов элемента и текста, вы можете использовать getNodeType (), чтобы проверить, какой дочерний узел (текст типа 3).

0 голосов
/ 26 октября 2010

Это firstName или firstname (смотреть дело).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...