получить атрибуты из XML-файла, используя Java - PullRequest
2 голосов
/ 03 августа 2011

У меня есть XML-файл с такой структурой:

<?xml version="1.0">
<person>
    <element att1="value1" att2="value2">Anonymous</element>
</person>

Как извлечь имена и значения атрибутов, используя любую нужную вам величину.

Я пробовал JDOM, но все еще не могу найти способ получить атрибуты из элемента.

Element root = doc.getRootElement();
List allChildren = root.getChildren();
Iterator i = listEtudiants.iterator();
while(i.hasNext())
{
    Element current = (Element)i.next();
    System.out.println(current.getChild("elementName").getText());
    // this let me get just the value inside > anf </
    // so, if it's can be done by completing this code
    // it will be something like current.getSomething()
}

РЕДАКТИРОВАТЬ: У меня все еще есть проблема с этим файлом. Я не могу добраться до атрибута foo и его значения moo.

<?xml version="1.0" encoding="UTF-8"?>
<person>
   <student att1="v1" att2="v2">
      <name>Michel</name>
      <prenames>
         <prename>smith</prename>
         <prename>jack</prename>
      </prenames>
   </student>
   <student classe="P1">
      <name foo="moo">superstar</name>
   </student>
</person>

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Если вы знаете имя атрибута, то вы можете использовать getAttributeValue, чтобы получить его значение:

current.getAttributeValue("att1"); // value1

Если вы не знаете имя атрибута (ов), вы можете использовать getAttributes() и выполнять итерацию для каждого Attribute:

List attributes = current.getAttributes();
Iterator it = attributes.iterator();
while (it.hasNext()) {
  Attribute att = (Attribute)it.next();
  System.out.println(att.getName()); // att1
  System.out.println(att.getValue()); // value1
}
2 голосов
/ 03 августа 2011

Использование JDOM (org.jdom.Element) Просто используйте:

current.getAttributes();
current.getAttributesValues();
current.getAttributeValue("AttributeName");

А вот документация: http://www.jdom.org/docs/apidocs/org/jdom/Element.html

РЕДАКТИРОВАТЬ: Вот пример того, что вы можете сделать сgetAttributes()

List<Attribute> l_atts = current.getAttributes();
for (Attribute l_att : l_atts) {
    System.out.println("Name = " + l_att.getName() + " | value = " + l_att.getValue());
}

РЕДАКТИРОВАТЬ 2: Для вашей проблемы foo и moo, вы просто не набираете getAttributes на правильном Element.Прежде чем вызывать его, необходимо сначала подключиться к элементу name. Если вы используете простой цикл, не получая дочерних элементов от элементов, которые вы пересекаете, вы будете перебирать только элементы "Student".

...