使用jaxp进行dom解析_动力节点Java学院整理
1.javax.xml.parsers包中的DocumentBuilderFactory用于创建DOM模式的解析器对象,DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回
2.调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂。
3.调用工厂对象的newDocumentBuilder方法得到DOM解析器对象。
4.调用DOM解析器对象的parse()方法解析XML文档,得到代表整个文档的Document对象,进行可以利用DOM特性对整个XML文档进行操作了。
案例1.遍历xml文件中跟节点下面的所有子节点.
1.xml的约束文件Java.dtd
2.xml文件内容如下java.xml
王亮 女 28 xxx
3.遍历xml文件的操作
//1.获取XML的根节点对象 @Test publicvoidtest()throwsParserConfigurationException,SAXException,IOException{ //调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂 DocumentBuilderFactorybuilderFactory=DocumentBuilderFactory.newInstance(); //调用工厂对象的newDocumentBuilder方法得到DOM解析器对象 DocumentBuilderbuilder=builderFactory.newDocumentBuilder(); //通过文件的方式获取Document对象 /*Filefile=newFile("src//parsers//java.xml"); System.out.println(file+"----"); Documentdocument=builder.parse(file);*/ //解析指定的文件 InputStreamis=this.getClass().getClassLoader() .getResourceAsStream("parsers//java.xml"); Documentdocument=builder.parse(is); //document.getDocumentElement()获取根节点的元素对象 Elementroot=document.getDocumentElement(); //遍历根节点下面的所有子节点 listNodes(root); }
2.遍历节点对象的方法
/** *遍历根据节点对象下面的所有的节点对象 *@paramnode */ publicvoidlistNodes(Nodenode){ //节点是什么类型的节点 if(node.getNodeType()==Node.ELEMENT_NODE){//判断是否是元素节点 Elementelement=(Element)node; //判断此元素节点是否有属性 if(element.hasAttributes()){ //获取属性节点的集合 NamedNodeMapnamenm=element.getAttributes();//Node //遍历属性节点的集合 for(intk=0;k4.查询某个节点对象(简单列举一些案例)
/** *根据标签的名称查找所有该名称的节点对象 */ publicvoidfindNode(Documentdocument){ //根据标签名称获取该名称的所有节点对象 NodeListnodelist=document.getElementsByTagName("teacher"); //遍历 for(inti=0;i5.删除指定的节点对象
/** *删除某个节点对象 * *@paramdocument *@paramid *@throwsTransformerException */ publicvoiddeleteNodeById(Documentdocument,Stringid) throwsTransformerException{ //获取删除的节点对象 Nodenode=document.getElementById(id); //是通过父节点调用removeChild(node)把子节点给删除掉 Nodenode1=node.getParentNode().removeChild(node); //创建TransformerFactory对象 TransformerFactorytransformerFactory=TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformertransformer=transformerFactory.newTransformer(); //把Document对象又重新写入到一个XML文件中。 transformer.transform(newDOMSource(document),newStreamResult( newFile("src//a.xml"))); }6.更新某个节点对象
/** *更新某个节点 * *@paramdocument *@paramid *@throwsTransformerException */ publicvoidupdateNodeById(Documentdocument,Stringid) throwsTransformerException{ //根据id获取元素指定的元素节点对象 Elementnode=document.getElementById(id); //获取元素节点的id属性节点对象 Attrattr=node.getAttributeNode("id"); //修改元素节点的属性值 attr.setValue("x122"); //获取该节点对象的所有孩子节点对象name、age、sex节点 NodeListnodelist=node.getChildNodes(); //遍历 for(inti=0;i7.在某个节点的下方添加新的节点
/** *在指定的节点下方添加新得某个节点 * *@paramdocument *@paramid *@throwsTransformerException */ publicvoidaddNodeById(Documentdocument,Stringid) throwsTransformerException{ //获取要添加位置节点的兄弟节点对象 Elementnode=document.getElementById(id); //获取其父节点对象 NodeparentNode=node.getParentNode(); //创建元素节点 Elementnd=document.createElement("student"); //设置元素节点的属性值 nd.setAttribute("id","x123"); //创建name元素节点 Nodename=document.createElement("name"); //设置name节点的文本值 name.appendChild(document.createTextNode("陈红军")); //创建age元素节点 Nodeage=document.createElement("age"); //设置age节点的文本值 age.appendChild(document.createTextNode("20")); //创建sex元素节点 Nodesex=document.createElement("sex"); //设置sex节点的文本值 sex.appendChild(document.createTextNode("男")); //在nd节点中添加3个子节点 nd.appendChild(name); nd.appendChild(age); nd.appendChild(sex); //在父节点中添加nd节点 parentNode.appendChild(nd); //创建TransformerFactory对象 TransformerFactorytransformerFactory=TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformertransformer=transformerFactory.newTransformer(); //把Document对象又重新写入到一个XML文件中。 transformer.transform(newDOMSource(document),newStreamResult( newFile("src//c.xml"))); }通过以上方法的练习希望你对xml的DOM解析有个入门的了解.
总结
以上所述是小编给大家介绍的使用jaxp进行dom解析_,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!