Проблема в разборе вложенных тегов в xml - PullRequest
0 голосов
/ 08 июля 2011

У меня есть xml, который я анализирую через анализатор DOM. xml в некоторой степени такой последовательности

 <root>
   <item1> abc </item1>
   <item2> def </item2>
   <item3> ghi </item3>
   <item4>
        <subItem4>
              <name> xyz </name>
              <id>   1  </id>
        </subItem4>
        <subItem4>
              <name> asd </name>
              <id>   2  </id>
        </subItem4>
   </item4>
</root>

Согласно этому фиктивному XML я дошёл до четвертого пункта, но не до самого детства. что я пытаюсь сделать так, чтобы получить самые сокровенные предметы:

NodeList slide = theElement.getElementsByTagName ("item4"). Item (0) .getChildNodes ();

        for(int i = 0; i<slide.getLength(); i++)
        {
            NodeList subSlides = theElement.getElementsByTagName("subItem4").item(0).getChildNodes();

                for (int j=0; j<subSlides.getLength(); j++)
                {
                    String subSlide_title   = subSlides.item(i).getFirstChild().getNodeValue();             

                }
        }

не работает. пожалуйста, кто-нибудь может определить, где я делаю ошибку при разборе. Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 08 июля 2011
NodeList nodes = doc.getElementsByTagName("item");
 for (int i = 0; i < nodes.getLength(); i++) {
     Element element = (Element) nodes.item(i);
     NodeList nodesimg = element.getElementsByTagName("name");
     for (int j = 0; j < nodesimg.getLength(); j++) {
        Element line = (Element) nodesimg.item(j);
        String value=getCharacterDataFromElement(line);
     }
}
public static String getCharacterDataFromElement(Element e) {
  Node child = e.getFirstChild();
  if (child instanceof CharacterData) {
     CharacterData cd = (CharacterData) child;
     return cd.getData();
  }
  return "?";
}

Я думаю, что приведенный выше код поможет вам в разборе XML-файла.

1 голос
/ 08 июля 2011

Все элементы XML перепутаны. Буквально в двух строках нет ошибок.

Например

<subItem 4> 

синтаксически неправильно, и я не понимаю, какой логический смысл вы могли бы из этого извлечь.

Вы имеете в виду

<subItem4> 

как в четвертом подпункте или

<subItem someAttribute="4">

Я бы рекомендовал изучать XML, это очень просто ... http://www.w3schools.com/xml/default.asp

1 голос
/ 08 июля 2011

Вы не используете допустимый XML - у вас не должно быть пробелов в именах тегов.

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


Обновление (после комментария о том, что опубликованный образец представляет фактический XML):

Ваш доступ через индексатор списка узлов неверен:

String subSlide_title = subSlides.item(i).getFirstChild().getNodeValue();

Попробуйте вместо этого(используя j вместо i, поскольку вызывается переменная внутреннего цикла):

String subSlide_title = subSlides.item(j).getFirstChild().getNodeValue();
...