public class Test {
public static void main(String[] args) throws Exception {
//1.创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder的对象
DocumentBuilder db=dbf.newDocumentBuilder();
//通过DocumentBuilder对象的parser方法加载xml文件到当前项目下
Document doc=db.parse("NewFile.xml");
//获取所有man节点的集合
NodeList manss =doc.getElementsByTagName("man");
//获取这个集合中节点的个数
System.out.println("一共有"+manss.getLength()+"个男人");
//遍历节点
for (int i = 0; i < manss.getLength(); i++) {
//通过item 方法 获取一个man节点
Node man = manss.item(i);
//获取man节点多余的属性 集合 item.getAttributes(); 返回NamedNodeMap集合
NamedNodeMap nnm=man.getAttributes();
System.out.println("第"+(i+1)+"个男人共有"+nnm.getLength()+"个属性");
//遍历
for (int j = 0; j < nnm.getLength(); j++) {
//通过item(index) 方法获取man节点的某一个属性
Node nd=nnm.item(j);
//获取属性名
System.out.println("属性名为:"+nd.getNodeName());
//获取属性值
System.out.println("属性值为:"+nd.getNodeValue());
}
/*
* 这个方法的前提是一件值得man节点有且只有一个id属性
* 将man节点进行强制转换成Element类型
*
* Element man=(Element)nnm.item(i);
* 通过man.getAttribute("id")方法获取属性值
String attrValue=man.getAttribute("id");
System.out.println("id的属性值为"+attrValue);*/
//--------2---------
//解析man节点的子节点
NodeList child=man.getChildNodes();
//遍历子节点child中每个的节点名和节点值
System.out.println("第"+(i+1)+"个男人有"+child.getLength()+"个子节点");
System.out.println("子节点名为:");
for (int k = 0; k < child.getLength(); k++) {
//输出每个子节点的节点名 包含 text类型的node element类型的node
//System.out.print(child.item(k).getNodeName()+" ");
//区分出来
if(child.item(k).getNodeType()==Node.ELEMENT_NODE) {
//获取element类型节点的节点名
System.out.print("第"+(k+1)+"个节点的名:"+child.item(k).getNodeName()+" , ");
//
// System.out.println("第"+(k+1)+"个节点的值:"+child.item(k).getFirstChild().getNodeValue());
System.out.println("第"+(k+1)+"个节点的值:"+child.item(k).getTextContent());
}
}
System.out.println();
}
}
}
public static void main(String[] args) throws Exception {
//1.创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder的对象
DocumentBuilder db=dbf.newDocumentBuilder();
//通过DocumentBuilder对象的parser方法加载xml文件到当前项目下
Document doc=db.parse("NewFile.xml");
//获取所有man节点的集合
NodeList manss =doc.getElementsByTagName("man");
//获取这个集合中节点的个数
System.out.println("一共有"+manss.getLength()+"个男人");
//遍历节点
for (int i = 0; i < manss.getLength(); i++) {
//通过item 方法 获取一个man节点
Node man = manss.item(i);
//获取man节点多余的属性 集合 item.getAttributes(); 返回NamedNodeMap集合
NamedNodeMap nnm=man.getAttributes();
System.out.println("第"+(i+1)+"个男人共有"+nnm.getLength()+"个属性");
//遍历
for (int j = 0; j < nnm.getLength(); j++) {
//通过item(index) 方法获取man节点的某一个属性
Node nd=nnm.item(j);
//获取属性名
System.out.println("属性名为:"+nd.getNodeName());
//获取属性值
System.out.println("属性值为:"+nd.getNodeValue());
}
/*
* 这个方法的前提是一件值得man节点有且只有一个id属性
* 将man节点进行强制转换成Element类型
*
* Element man=(Element)nnm.item(i);
* 通过man.getAttribute("id")方法获取属性值
String attrValue=man.getAttribute("id");
System.out.println("id的属性值为"+attrValue);*/
//--------2---------
//解析man节点的子节点
NodeList child=man.getChildNodes();
//遍历子节点child中每个的节点名和节点值
System.out.println("第"+(i+1)+"个男人有"+child.getLength()+"个子节点");
System.out.println("子节点名为:");
for (int k = 0; k < child.getLength(); k++) {
//输出每个子节点的节点名 包含 text类型的node element类型的node
//System.out.print(child.item(k).getNodeName()+" ");
//区分出来
if(child.item(k).getNodeType()==Node.ELEMENT_NODE) {
//获取element类型节点的节点名
System.out.print("第"+(k+1)+"个节点的名:"+child.item(k).getNodeName()+" , ");
//
// System.out.println("第"+(k+1)+"个节点的值:"+child.item(k).getFirstChild().getNodeValue());
System.out.println("第"+(k+1)+"个节点的值:"+child.item(k).getTextContent());
}
}
System.out.println();
}
}
}