遍历XML文件的节点有两种方法:
在不清楚当前节点的属性个数时使用 node接受nodelist中的一个node然后用NamedNodeMap 接受当前节点的所有属性 并以Map形式返回
使用getElementsByTagName("") 获取某个节点的集合,返回NodeList类型
未知XML节点属性时的做法
已知XML节点属性时的做法
常用的节点类型
常用的节点类型
常用的节点类型
bookList.getLength 获取到底booklist里有几本书
Nodelist 节点类型 现在booklist 里有两本书(book1 and book2)
getElementsByTagName("book") 获取第一层节点
常用节点类型
不知道属性值的情况下,遍历所有属性值
常用的結點類型
常用节点类型
NodeList nodelist=document.getElementByTagName("book");//获取所有book节点。
//在不知道book有几个属性时
for(int i=0;i<nodelist.getlength;i++){
Node book=nodelist.ltem(i);//获取nodelist集合中一个节点。
NameNodeMap attrs=book.getAttributes();//获取此节点所有属性的集合。
for(int j=0;j<attrs.getLength();j++){
Node attr=attrs.item(j);//获取book节点的某个属性。
attr.getNodeName();//获取此属性的属性名。
attr.getNodeValue();//获取此属性的属性值。
}
}
//在明确知道book只有一个属性值时
Element bookid=(Element)nodelist.item(i);//注意强转
bookid.getNodeName();//获取此属性的属性名。
bookid.getNodeValue();//获取此属性的属性值。
getElementByTagName("标签名")返回一个list
通过item(index)方法获取节点,放在Node类型中
Node类型的getAttributes()获取节点所有属性的集合 返回一个NamedNodeMap
getNodeName获取属性名,getNodeValue()获取属性值
当已经知道某节点有且只有一个属性,将该节点进行强制类型转换,转换成Element类型,然后通过getAttribute("属性名")方法获取属性值
常用的节点类型
创建一个DocumentBuilderFactory的对象`:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
创建一个DocumentBuilder的对象:DocumentBuilder db = dbf.newDocumentBuilder();
通过DocumentBuilder对象的parser方法加载xml文件到当前项目下:Document document = db.parse(String);
获取所有book节点的集合:NodeList bookList = document.getElementsByTagName(String tagname);
通过 item(i)方法 获取一个book节点,nodelist的索引值从0开始:
Node book = bookList.item(i);
获取book节点的所有属性集合:NamedNodeMap attrs = book.getAttributes();
通过item(index)方法获取book节点的某一个属性:
Node attr = attrs.item(j);
获取属性名:attr.getNodeName();
获取属性值:attr.getNodeValue();
DOM解析XML文件的属性名和属性值
//创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //创建一个DocumentBuilder的对象 try { //创建DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); //通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下 Document document = db.parse("books.xml"); //获取所有book节点的集合 NodeList bookList = document.getElementsByTagName("book"); //通过NodeList的getLength()方法获取bookList的长度 System.out.println("一共有"+bookList.getLength()+"本书"); //遍历每一个book节点 for(int i=0;i<bookList.getLength();i++){ //前提:不知道属性名和属性个数 // //通过item(i)方法获取一个book节点,NodeList的索引值从0开始 // Node book = bookList.item(i); // //获取book节点的所有属性集合 // NamedNodeMap attrs = book.getAttributes(); // System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性"); // //遍历book的属性 // for(int j=0;j<attrs.getLength();j++){ // //通过item(index)方法获取book节点的某一个属性 // Node attr = attrs.item(j); // //获取属性名 // System.out.print("属性名:"+attr.getNodeName()); // //获取属性值 // System.out.println("--属性值:"+attr.getNodeValue()); // } //前提:已经知道book节点有且只能有1个id属性 //将book节点进行强制类型转换,转换成Element类型 Element book = (Element)bookList.item(i); //通过getAttribute("id")方法获取属性值 String attrValue = book.getAttribute("id"); System.out.println("id属性的属性值为"+attrValue); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
常用的节点类型
使用Dom解析xml文件的属性节点。
在不知道节点属性的个数和属性名时:
1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
2、通过NodeList.getLength()获得集合长度,遍历集合
3、Node node = NodeList.item(index)获得里面的节点
4、通过NamedNodeMap attrs = node.getAttributes()获取所有属性集合
5、通过attrs.getLength()遍历集合,Node attr = atrrs.item(index)
6、attr.getNodeName()获得属性名,attr.getNodeValue()获取属性值
前提已经知道book节点有且只有1个id属性,将book节点进行强制类型转换,转换成element类型。
1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
2、通过NodeList.getLength()获得集合长度,遍历集合
3、element book=(element)bookList.item(i);//强制转换为element类型
4、string attrValue = book.getAttribute("id");
DOM 方式解析 XML
DocumentBuilder db =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
// 通过DocumentBuilder对象的parse方法加载books.xml文件到当前项目下
Document document = db.parse("books.xml");
// 通过标签名获取节点集合, 获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
// 遍历每一个book节点
for(int i = 0; i < bookList.getLength(); i ++){
// 通过 item(i) 方法 获取 一个book节点,nodeList的索引值从 0 开始
Node book = bookList.item(i);
// 获取 book 节点的所有属性的集合
NameNodeMap attrs = book.getAttributes();
// 遍历 book 的属性
for(int j = 0; j < attrs.getLength(); j ++){
// 通过 item(index) 方法获取 book 节点的某一属性
Node attr = attrs.item(j);
// 获得属性名称
System.out.print("属性名:" + attr.getNodeName());
System.out.println("---属性值:" + attr.getNodeValue());
}
}