2014-02-20 6 views
1

Привет я хочу разобрать довольно странный XML, глядя, как это:Синтаксический продвинутый XML в Java

<foo> 
    <foo1> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
    </foo1> 
</foo> 

<foo> 
    <foo1> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
     <foo2></foo2> 
    </foo1> 
</foo> 

Я не могу получить значения из foo2, когда я использовал этот учебник:

http://javarevisited.blogspot.com/2011/12/parse-xml-file-in-java-example-tutorial.html

Но не работают, если у нас есть такие же параметры, как foo2

+0

вы должны Google для 'Jaxb', или нажмите [здесь] (http://www.mkyong.com/java/jaxb-hello-world-example /) Учебник, помните, не пытайтесь изобрести колесо –

+2

Этот вопрос не соответствует теме, потому что у него недостаточно информации для диагностики проблемы. Опишите вашу проблему более подробно или включите [минимальный пример] (http://stackoverflow.com/help/mcve) в самом вопросе. –

+0

Возможно, вам стоит рассказать о том, что вы собираетесь разбирать. В «список»? Для 'String'? Для 'String []'? К вашей собственной структуре данных? – BennX

ответ

0

// Нормализация, то ваш XML создать Document этим XML затем следуют ниже код

NodeList nList = doc.getElementsByTagName("foo"); 
     for (int temp = 0; temp < nList.getLength(); temp++) { // loop for foo 
      Node nodeTable = nList.item(temp); 
      Element xmlFoo = (Element) nodeTable; 
      if (nodeTable.getNodeType() == Node.ELEMENT_NODE) { 
      NodeList nodeListFoo1 = xmlFoo.getElementsByTagName("foo1"); 
      for (int i = 0; i < nodeListFoo1.getLength(); i++) { // loop for foo1 
       Node nodefoo2 = nodeListFoo1.item(i); 
       Element elementfoo1 = (Element) nodefoo2; 
       // Collect foo2 
       NodeList nodeListfoo2Name = elementfoo1.getElementsByTagName("foo2"); 
       for (int j = 0; j < nodeListfoo2Name.getLength(); j++) { //// loop for foo2 
        Node nodefoo2Name = nodeListfoo2Name.item(j); 
        Element elementfoo2Name = (Element) nodefoo2Name; 
        //TODO: write code here, what you want to collect from foo2 
        } 
       } 
      } 
     } 
0

Я бы рекомендовал использовать jdom2. Это бесплатная библиотека и должна работать без проблем.

Сначала вы разбираете XML-строку в Document. Затем этот документ представляет ваш экземпляр completeml.

SAXBuilder reader = new SAXBuilder(); 
    Document doc = null; 
    try 
    { 
     doc = reader.build(new File("Path to XML")); //also string is possible 
    } 
    catch (JDOMException | IOException e) 
    { 
     e.printStackTrace(); 
    } 

После этого вы можете перебирать все его дети. Это будет внешний. Если вы не знаете, сколько у вас детей, вы всегда можете проверить, есть ли childCount != 0, чем есть еще один. Возможно, для этого нужен рекурсивный метод.

for (Element e : doc.getRootElement().getChildren()) 
    { 
     // do something with the childs here for example 
     e.getText(); //would be "" in your case 
     for(Element child : e.getChildren()){ 
      //do something with the child child 
     } 
    } 

И так далее. Вы можете получить каждый attribute или getName() или такие элементы.

Here is one more Tutorial for the DOM parser.

1

Это потому, что вы должны иметь родительский элемент для хранения всех других элементов, как показано в следующем примере:

<parentFoo> 
    <foo> 
     <foo1> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
     </foo1> 
    </foo> 

    <foo> 
     <foo1> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
      <foo2></foo2> 
     </foo1> 
    </foo> 
</parentFoo> 
-1

Я согласен, что JAXB является путь. Используйте онлайн-генератор XSD для вас xml. Возьмите этот XSD и используйте привязку JAX-B, которую Netbeans предоставляет для создания классов Java.

Затем вы можете использовать стандартный API JAX-B для маршаллинга и развязывания.

+0

Почему -1? Это вполне законный ответ? – dan

Смежные вопросы