get the attributes from an XML File using Java

2019-07-21 15:11发布

问题:

I have an XML file with this structure:

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

How can I extract the attributes names and values using wathever you want.

I tried JDOM, but I still can't find a way to get the attributes from the element.

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()
}

EDIT: I'm still having a problem with this file. I can't reach foo attribute and its value 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>

回答1:

If you do know the name of the attribute, then you can use getAttributeValue to obtain its value:

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

If you do not know the name of the attribute(s), then you can use getAttributes() and iterate over each 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:

Using JDOM (org.jdom.Element) Just use :

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

And here is the documentation : http://www.jdom.org/docs/apidocs/org/jdom/Element.html

EDIT : Here is an example what you can do with getAttributes()

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

EDIT 2 : For your foo and moo problem, you just don't call getAttributes on the correct Element. You first have to be on the name element before calling it, if you use your simple loop without getting children from the Elements you cross, you'll only iterate over the "Student" elements.