使用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;k
4.查询某个节点对象(简单列举一些案例)
/**
*根据标签的名称查找所有该名称的节点对象
*/
publicvoidfindNode(Documentdocument){
//根据标签名称获取该名称的所有节点对象
NodeListnodelist=document.getElementsByTagName("teacher");
//遍历
for(inti=0;i
5.删除指定的节点对象
/**
*删除某个节点对象
*
*@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;i
7.在某个节点的下方添加新的节点
/**
*在指定的节点下方添加新得某个节点
*
*@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解析_,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!