我正在尝试将XML读入HashMap
,我正在尝试读取每个XML节点并根据其内容创建新对象。
如何检索XML的每个节点的值?
例如:我需要在for循环中检索birthdate
值并使用它来创建新的studentInfo
对象。
xml:
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd"><description>A bunch students and courses</description><student studentID="0144085" gender ="M"><firstname>Jack</firstname>
<lastname>Blogs</lastname> <birthday day="21" month="04" year="1983"/><paper>Data Structures and Algorithms</paper><paper>Distributed and Mobile Systems</paper> <paper>Software Engineering</paper><paper>Highly Secure Systems</paper><paper>Engineering Computations</paper><paper>Object Oriented Programming</paper></student>
代码:
//jf : set StudentINfoSet class properties
this.description = rootXMLNode.getElementsByTagName( "description" ).item( 0 ).getTextContent();
studentMap = new HashMap<String, StudentInfo>();
NodeList nodeList = document.getElementsByTagName( "student" );
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
StudentInfo si = new StudentInfo(Integer.toString(i)){};
/*
* String studentID, String firstName, String lastName,
String birthdate, String gender, char studentGender
* */
this.studentMap.put(Integer.toString(i), si);
}
System.out.println("Number of students : "+nodeList.getLength());
答案 0 :(得分:1)
我会使用JAXB,请参阅此处的示例http://www.mkyong.com/java/jaxb-hello-world-example/
答案 1 :(得分:1)
你应该考虑使用jaxb或简单框架来实现这一点而不是编写循环并迭代XML节点
答案 2 :(得分:0)
您应该使用对象的唯一标识符作为hashmap键。我相信你的情况studentID将是你的hashmap键的好候选人。相应地定义您的hashmap并按照建议保存元素。您应该能够使用studentID轻松地从散列图中检索每个学生。
希望它有所帮助!
答案 3 :(得分:0)
我认为我已经解决了这个问题。这是我的代码。谢谢你的帮助。
public StudentInfoSet(InputStream in) {
if (in != null) {
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
builderFactory.setNamespaceAware(true);
builderFactory.setValidating(false);
builderFactory.setAttribute(JAXP_SCHEMA_LANGUAGE,W3C_XML_SCHEMA);
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// parse the input stream
document = builder.parse(in);
document.getDocumentElement().normalize();
// JAXP
Element rootXMLNode = document.getDocumentElement();
//jf : set StudentINfoSet class properties
this.description = rootXMLNode.getElementsByTagName( "description" ).item( 0 ).getTextContent();
studentMap = new HashMap<String, StudentInfo>();
NodeList nodeList = document.getElementsByTagName( "student" );
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
StudentInfo si = new StudentInfo(Integer.toString(i)){};
/*
* String studentID, String firstName, String lastName,
String birthdate, String gender, char studentGender
* */
//this.studentMap.put(Integer.toString(i), si);
System.out.println("\nCurrent Element :" + currentNode.getNodeName());
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) currentNode;
System.out.println("Staff id : " + eElement.getAttribute("firstname"));
System.out.println("First Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
System.out.println("Last Name : " + eElement.getElementsByTagName("birthday").item(0).getTextContent());
NodeList studentPaperNodeList = eElement.getElementsByTagName("paper");
for (int j = 0; j < studentPaperNodeList.getLength(); j++) {
Element paperNodeElement = (Element)studentPaperNodeList.item(j);
System.out.println("\nCurrent paper :" + paperNodeElement.getTextContent());
}
}
}
System.out.println("Number of students : "+nodeList.getLength());
} catch (FactoryConfigurationError e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}