DOM解析与DOM4J

今天温习了一下DOM解析,记录关键点,以次加强记忆和理解

1 DOM   把XML 文件映射成一个倒挂的“”“树”,以根元素为根节点,每个节点都是一个对象,通过这些对象获取信息,

  具体解析步骤如下:

1 创建解析器工厂

2由工厂创建解析器

3得到Document 对象,即Dom树

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse("src/aa.xml");

//根据标签名获得所有该标签名字的点列表

NodeList studentList = doc.getElementByTagName("student");

//遍历这个studentList

for(int i = 0;i<studentList.length;i++){

    Node  studentNode= studentList.item(i);

    Element  studentEle = (Element)studentNode;

   //获取student的属性

  String studentName =  studentEle.getAttribute("name");

//还可以获得这个当前的节点下的子节点

NodeList list = studentNode.getChildNodes();

//然后再继续遍历.......

 

}

//增加元素即标签student

Element newNode = doc.createNode("student");

//设置新创建的属性值

newNode.setAttribute("name","tom");

//再创建对应的元素即标签是type

Element newType = doc.createNode("type");

type.setAttribute("source","90");

//对应的type节点添加到student标签下

newNode.appendChild(newType);

//school为根标签

doc.getElementByTagName("school").item(0).appendChild(newStudent);

//保存XML

TransformerFacotory tf = TransformerFactory.newInstance();

Transformet  transformer = tf.newTransformer();

transformer.setOutpurProperty(OutputKeys.Encoding,"utf-8");

DOMSource docsource = new DOMSource(doc);

StreamResult streamResult = new StreamResult(new File("src/aa.xml"));

transformer.transform(docsource,streamResult);

*****************************************华丽的分割线*******************************************

2下面是Dom4J

只需要两步就可以加载xml

SAXReader saxReader = new SAXReader();

Document doc = saxReader.reader(new File("src/aa.xml"));

Element root = doc.getRootElement();

//将根节点的子一代遍历出

for(Iterator ite = root.elementIterator();ite.hasNext()){

Element  student  =  (Element)ite.next();

//获得这个节点的属性name

Attribute  nameattr = student.attribute("name");

String name = namesttr.getValue();

 

}

下面写几个常用的方法

//得到某个对应名字的节点

Element memberEle = root.element("member");//member 是节点的名字

//对应文本的内容

String text  = memberEle.getText();

//或者直接去对应元素的文本内容 ,例如根元素下的name子节点的文本内容

String test = root.elementText("name");

//遍历指定名字的节点下的所有子节点并进行遍历,例如取student的节点下子节点进行遍历

List nodes = rootEle.elements("student");

for(Iteator it = nodes.iterator;it.hasNext()){

Element ele = (Element)it.next();

........

}

//遍历某个节点的所有子节点

for(Iterator it = root.elementIterator();it.hasNext();){

Element ele = it.next();

.......

}

//某个节点下添加子节点

.addElement(nodeNma);

parentElm.remove(childNode)//parentElm是父节点,

//获得某节点的属性

Attribute  attribute =  root.attribute("age") //属性名

String text = attribute.getText();//取得属性文本值

//取得指定名字节点的指定属性

root.element("name").attributValue("age");

//遍历某个节点的属性

for(Iterator it = root.attributeIterator();it.hasNext();){

Attribute attr =  (Attribute)it.next()

String text = sttr.getText();

//设置某个节点的属性

.addAttribute("name","tom");

//设置属性文本值

Attribute attr = root.attribute("name");

attr.setText("tom");

//删除

root.remove(attr)

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值