2015-10-28 2 views
1

, если у меня есть следующий XML:Получить элементы из тегов в XML в Java

<Shapes> 
    <Numbers>n-3</Numbers> 
    <Ellipse.0> 
     <Color> 
      <Red>r-0</Red> 
      <Green>g-0</Green> 
      <Blue>b-255</Blue> 
     </Color> 
     <FillColor> 
      <Red>r-0</Red> 
      <Green>g-0</Green> 
      <Blue>b-255</Blue> 
     </FillColor> 
     <Position> 
      <X>x-12</X> 
      <Y>y-12</Y> 
     </Position> 
     <properties> 
      <Hight>v-123.0</Hight> 
      <Width>v-12.0</Width> 
     </properties> 
    </Ellipse.0> 
</Shapes> 

и я хочу код в Java, которые получают имена элементов тега для примера: элементов свойств тега (Высота, ширина)

это мой метод:

public static List<String> getNodes(String fileName, String nodeName) throws ParserConfigurationException, SAXException, IOException{ 

    try { 
     List<String> nodes = new ArrayList<String>(); 
     // Create a factory 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     // Use the factory to create a builder 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(fileName); 

     NodeList list = doc.getElementsByTagName(nodeName); 

     for (int i = 0; i < list.getLength(); i++) { 
      // Get element 
      Element element = (Element) list.item(i); 
      nodes.add(element.getNodeName()); 

     } 
     return nodes; 
    } catch (Exception e) { 
     throw new RuntimeException(); 
    } 
} 

если NODENAME = "Свойства" возвращает список, который содержит [ "Свойства", "Свойства", "Свойства"]

+0

Попробуйте отправить то, что вы пробовали. – km1

+0

Какой XML-парсер вы используете? Какие проблемы возникают с вашей текущей реализацией? – azurefrog

+0

@ km1 я отредактировал сообщение –

ответ

-1

Как только вы нашли узел <properties>, вы хотите извлечь имена его дочерних узлов. Это работает для меня:

List<String> nodes = new ArrayList<String>(); 
Document doc = DocumentBuilderFactory.newInstance() 
     .newDocumentBuilder() 
     .parse(fileName); 
NodeList list = doc.getElementsByTagName(nodeName); // find <properties> node(s) 
NodeList childList = list.item(0).getChildNodes(); // list.item(0) is first (and only) match 
for (int i = 0; i < childList.getLength(); i++) { 
    Node childNode = childList.item(i); 
    String childNodeName = childNode.getNodeName(); 
    if (!childNodeName.equals("#text")) { 
     nodes.add(childNodeName); 
    } 
} 
+0

И как это работает? Что ОП учился на этом? Почему он потратил бы время на следующую проблему вместо того, чтобы просто вернуться сюда, чтобы кто-то снова заработал для них работу? – Vogel612

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