首先有一个这样的XML文档
<?xml version = "1.0" encoding = "utf-8"?>
<School> aaa
<Student trip="ok">
<Name>沈浪</Name>
<Num>1006010022</Num>
<Classes>信管2</Classes>
<Address>浙江杭州3</Address>
<Tel>123456</Tel>
</Student>
<Student>
<Name>沈1</Name>
<Num>1006010033</Num>
<Classes>信管1</Classes>
<Address>浙江杭州4</Address>
<Tel>234567</Tel>
</Student>
<Student>
<Name>沈2</Name>
<Num>1006010044</Num>
<Classes>生工2</Classes>
<Address>浙江杭州1</Address>
<Tel>345678</Tel>
</Student>
<Student>
<Name>沈3</Name>
<Num>1006010055</Num>
<Classes>电子2</Classes>
<Address>浙江杭州2</Address>
<Tel>456789</Tel>
</Student>
</School>
使用Java处理这个文档,输出根节点下的子节点信息:
public void test() {
String filePath="C:\\Users\\shz\\RCPDemo\\school.xml";
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder db=factory.newDocumentBuilder();
Document xmldoc=db.parse(new File(filePath));
Element root=xmldoc.getDocumentElement();
//removeTextNode(root);//预处理
NodeList children =root.getChildNodes();
for(int i=0;i<children.getLength();i++){
Node child=children.item(i);
System.out.println(child.getNodeName());
}
System.out.println(root.getChildNodes().getLength());
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出结果为:
#text
Student
#text
Student
#text
Student
#text
Student
#text
9
一共有9个节点,这是因为DOM是有严格的规范,子节点之间的空白回车换行也都是一个节点了,我们如果不需要这些节点,就可以先把这些节点删掉,好在这些节点的类型都是TEXT_NODE,所以在处理这个DOM之前,先搞个递归函数预处理一下:
void removeTextNode(Node root){
if(root.hasChildNodes()){
NodeList children=root.getChildNodes();
int count=children.getLength();
for(int i=count-1;i>=0;i--){//需要从后往前删除,防止出现沙漏效应
Node child=children.item(i);
if(child.getNodeType()==Node.TEXT_NODE){
child.getParentNode().removeChild(child);
}
else {
removeTextNode(child);
}
}
}
}
把前面那个被注释掉的函数调用放开,重新运行就好了:
结果就是:
Student
Student
Student
Student
4
搞定!!!