无法使用 JDOM 从 XML 获取子属性
Cannot get children attributes with JDOM from XML
我试图获取示例 XML
文件中每个人的姓名,但我得到的是 null
值而不是他们的姓名。
Java代码:
package testjdom;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class TestJDOM {
public static void main(String[] args) throws
JDOMException,
IOException {
SAXBuilder jdomBuilder
= new SAXBuilder();
Document jdomDocument
= jdomBuilder.build("persons.xml");
Element jdomRoot = jdomDocument.getRootElement();
List<Element> children = jdomRoot.getChildren();
for (Element child : children) {
System.out.println(child.getAttributeValue("name"));
}
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<id>1</id>
<name>The Best</name>
<email>thenextbigthing@gmail.com</email>
<birthDate>1981-11-23</birthDate>
</person>
<person>
<id>2</id>
<name>Andy Jr.</name>
<email>usa@gmail.com</email>
<birthDate>1982-12-01</birthDate>
</person>
<person>
<id>3</id>
<name>JohnDoe</name>
<email>gameover@gmail.com</email>
<birthDate>1990-01-02</birthDate>
</person>
<person>
<id>4</id>
<name>SomeOne</name>
<email>rucksack@gmail.com</email>
<birthDate>1988-01-22</birthDate>
</person>
<person>
<id>5</id>
<name>Mr. Mxyzptlk</name>
<email>bigman@hotmail.com</email>
<birthDate>1977-08-12</birthDate>
</person>
</persons>
如何获取每个名称的真实值?
最终我想从XML中得到每个人的四个值。我有一个名为 Person 的 class,它具有与 XML 文件中的人员相同的属性、id、名称等。我想从 "Person" 创建新对象class 并使用 XML 中的数据设置其属性值。当我创建一个新对象并使用我从 XML 获得的值成功设置其属性时,我想将该对象添加到 ArrayList,然后对其余人员重复相同的过程。
你有两个问题。 name
不是一个属性,它是一个子元素。其次,getChildren()
只下降一级。
改变
Element jdomRoot = jdomDocument.getRootElement();
List<Element> children = jdomRoot.getChildren();
for (Element child : children) {
System.out.println(child.getAttributeValue("name"));
}
到
Element jdomRoot = jdomDocument.getRootElement();
List<Element> people = jdomRoot.getDescendants(new ElementFilter("person"));
for (Element person: people) {
System.out.println(person.getChild("name").getText());
}
我试图获取示例 XML
文件中每个人的姓名,但我得到的是 null
值而不是他们的姓名。
Java代码:
package testjdom;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class TestJDOM {
public static void main(String[] args) throws
JDOMException,
IOException {
SAXBuilder jdomBuilder
= new SAXBuilder();
Document jdomDocument
= jdomBuilder.build("persons.xml");
Element jdomRoot = jdomDocument.getRootElement();
List<Element> children = jdomRoot.getChildren();
for (Element child : children) {
System.out.println(child.getAttributeValue("name"));
}
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<id>1</id>
<name>The Best</name>
<email>thenextbigthing@gmail.com</email>
<birthDate>1981-11-23</birthDate>
</person>
<person>
<id>2</id>
<name>Andy Jr.</name>
<email>usa@gmail.com</email>
<birthDate>1982-12-01</birthDate>
</person>
<person>
<id>3</id>
<name>JohnDoe</name>
<email>gameover@gmail.com</email>
<birthDate>1990-01-02</birthDate>
</person>
<person>
<id>4</id>
<name>SomeOne</name>
<email>rucksack@gmail.com</email>
<birthDate>1988-01-22</birthDate>
</person>
<person>
<id>5</id>
<name>Mr. Mxyzptlk</name>
<email>bigman@hotmail.com</email>
<birthDate>1977-08-12</birthDate>
</person>
</persons>
如何获取每个名称的真实值?
最终我想从XML中得到每个人的四个值。我有一个名为 Person 的 class,它具有与 XML 文件中的人员相同的属性、id、名称等。我想从 "Person" 创建新对象class 并使用 XML 中的数据设置其属性值。当我创建一个新对象并使用我从 XML 获得的值成功设置其属性时,我想将该对象添加到 ArrayList,然后对其余人员重复相同的过程。
你有两个问题。 name
不是一个属性,它是一个子元素。其次,getChildren()
只下降一级。
改变
Element jdomRoot = jdomDocument.getRootElement();
List<Element> children = jdomRoot.getChildren();
for (Element child : children) {
System.out.println(child.getAttributeValue("name"));
}
到
Element jdomRoot = jdomDocument.getRootElement();
List<Element> people = jdomRoot.getDescendants(new ElementFilter("person"));
for (Element person: people) {
System.out.println(person.getChild("name").getText());
}