打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用JAXP进行DOM解析( DocumentBuilderFactory、DocumentBuil...

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 public void test() throws ParserConfigurationException, SAXException, IOException{ //调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); //调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象 DocumentBuilder builder = builderFactory.newDocumentBuilder(); //通过文件的方式获取Document对象 /*File file = new File('src//parsers//java.xml'); System.out.println(file+'----'); Document document = builder.parse(file);*/ //解析指定的文件 InputStream is= this.getClass().getClassLoader() .getResourceAsStream('parsers//java.xml'); Document document = builder.parse(is); //document.getDocumentElement()获取根节点的元素对象 Element root = document.getDocumentElement(); //遍历根节点下面的所有子节点 listNodes(root); }


//2.遍历节点对象的方法

/** * 遍历根据节点对象下面的所有的节点对象 * @param node */ public void listNodes(Node node) { // 节点是什么类型的节点 if (node.getNodeType() == Node.ELEMENT_NODE) {// 判断是否是元素节点 Element element = (Element) node; //判断此元素节点是否有属性 if(element.hasAttributes()){ //获取属性节点的集合 NamedNodeMap namenm = element.getAttributes();//Node //遍历属性节点的集合 for(int k=0;k< listnode.getlength();="" j++)="" {="" 得到某个具体的节点对象="" node="" nd="listnode.item(j);" system.out.println('name::'="" +="" nd.getnodename()="" +="" '="" value:::'="" +="" nd.getnodevalue()="" +="" '="" type:::'="" +="" nd.getnodetype());="" 重新调用遍历节点的操作的方法="" listnodes(nd);="" }="" }="">

4.查询某个节点对象(简单列举一些案例)

/** * 根据标签的名称查找所有该名称的节点对象 */ public void findNode(Document document) { //根据标签名称获取该名称的所有节点对象 NodeList nodelist = document.getElementsByTagName('teacher'); //遍历 for (int i = 0; i < nodelist.getlength();="" i++)="" {="" 得到具体的某个节点对象="" node="" node="nodelist.item(i);" system.out.println(node.getnodename());="" }="" }="" *="" *="" 根据属性的值="" 查询某个节点对象="" *="" 属性值是唯一(假设)="" *="" @param="" document="" *="" @param="" value="" *="" @return="" */="" public="" node="" findnodebyattrvalue(document="" document,="" string="" value)="" {="" 根据标签名称获取该名称的节点对象集合="" nodelist="" nodelist="document.getElementsByTagName('teacher');" 遍历="" for="" (int="" i="0;" i="">< nodelist.getlength();="" i++)="" {="" 获取某个具体的元素节点对象="" element="" node="(Element)" nodelist.item(i);="" 根据属性名称获取该节点的属性节点对象="" attr="" attr="node.getAttributeNode('name');" 获取属性节点的值是否给指定的节点属性值相同="" if="" (attr.getnodevalue().equals(value))="" {="" 返回此节点="" return="" node;="" }="" }="" return="" null;="" }="" *="" *="" 根据id获取某个节点对象="" *="" *="" @param="" document="" *="" @param="" id="" *="" @return="" */="" public="" node="" findnodebyid(document="" document,="" string="" id)="" {="" return="" document.getelementbyid(id);="">

5.删除指定的节点对象

/** * 删除某个节点对象 * * @param document * @param id * @throws TransformerException */ public void deleteNodeById(Document document, String id) throws TransformerException { //获取删除的节点对象 Node node = document.getElementById(id); // 是通过父节点调用removeChild(node)把子节点给删除掉 Node node1 = node.getParentNode().removeChild(node); //创建TransformerFactory对象 TransformerFactory transformerFactory = TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformer transformer = transformerFactory.newTransformer(); // 把Document对象又重新写入到一个XML文件中。 transformer.transform(new DOMSource(document), new StreamResult( new File('src//a.xml'))); }

6.更新某个节点对象

/** * 更新某个节点 * * @param document * @param id * @throws TransformerException */ public void updateNodeById(Document document, String id) throws TransformerException { //根据id获取元素指定的元素节点对象 Element node = document.getElementById(id); //获取元素节点的id属性节点对象 Attr attr = node.getAttributeNode('id'); //修改元素节点的属性值 attr.setValue('x122'); //获取该节点对象的所有孩子节点对象name、age、sex节点 NodeList nodelist = node.getChildNodes(); //遍历 for (int i = 0; i < nodelist.getlength();="" i++)="" {="" 得到具体的节点对象="" node="" n="nodelist.item(i);" 判断是否是元素节点对象="" if="" (n.getnodetype()="=" node.element_node)="" {="" 看是否是name节点="" if="" (n.getnodename().equals('name'))="" {="" n.settextcontent('君君');//修改其值="" }="" else="" if="" (n.getnodename().equals('age'))="" {//看看是否是age节点="" n.settextcontent('80');//修改其值="" }="" else="" if="" (n.getnodename().equals('sex'))="" {//看看是否是sex节点="" n.settextcontent('男');//修改其值="" }="" else="" {="" system.out.println('不做处理');="" }="" }="" }="" 创建transformerfactory对象="" transformerfactory="" transformerfactory="TransformerFactory" .newinstance();="" transformer类用于把代表xml文件的document对象转换为某种格式后进行输出="" transformer对象通过transformerfactory获得="" transformer="" transformer="transformerFactory.newTransformer();" 把document对象又重新写入到一个xml文件中。="" transformer.transform(new="" domsource(document),="" new="" streamresult(="" new="" file('src//b.xml')));="">

7.在某个节点的下方添加新的节点

/** * 在指定的节点下方添加新得某个节点 * * @param document * @param id * @throws TransformerException */ public void addNodeById(Document document, String id) throws TransformerException { //获取要添加位置节点的兄弟节点对象 Element node = document.getElementById(id); //获取其父节点对象 Node parentNode = node.getParentNode(); //创建元素节点 Element nd = document.createElement('student'); //设置元素节点的属性值 nd.setAttribute('id', 'x123'); //创建name元素节点 Node name = document.createElement('name'); //设置name节点的文本值 name.appendChild(document.createTextNode('陈红军')); //创建age元素节点 Node age = document.createElement('age'); //设置age节点的文本值 age.appendChild(document.createTextNode('20')); //创建sex元素节点 Node sex = document.createElement('sex'); //设置sex节点的文本值 sex.appendChild(document.createTextNode('男')); //在nd节点中添加3个子节点 nd.appendChild(name); nd.appendChild(age); nd.appendChild(sex); //在父节点中添加nd节点 parentNode.appendChild(nd); //创建TransformerFactory对象 TransformerFactory transformerFactory = TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformer transformer = transformerFactory.newTransformer(); //把Document对象又重新写入到一个XML文件中。 transformer.transform(new DOMSource(document), new StreamResult( new File('src//c.xml'))); }

通过以上方法的练习希望你对xml的DOM解析有个入门的了解.



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java将DOM文档和XML文件互相转换
XML认证教程,第 9 部分:DOM
文档对象模型(DOM
在java中使用dom解析xml
XML与web开发
BlogJava - eamoi之Coder日志 - 【原创】AJAX开发简略续一
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服