dom以及dom4j解析XML

xml:可扩展标记语言
特点:
1.支持多个平台
2.用于数据交互(存数据)
3.任意写标签

优点:
ajax(异步刷新)
框架的配置信息

验证解析器:只能检测到xml的一些语法错误
非验证解析器:一般以dtd开头

xml的解析方式
1.dom(性能不是特别好,(它是首先把dom全部加载出来,再一个个解析))
2.dom4j(对dom的一个封装,对dom的一个优化)
3.sax(数量最大的xml,它是边解析边加载)

dom解析XML

1.把XML文件转化为dom对象
具体步骤
a. DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
// newInstance() 为静态方法 返回一个DocumentBuilderFactory的对象
b. DocumentBuilder db=dbf.newDocumentBuilder();
//调用DocumentBuilderFactory中的newDocumentBuilder()得到一个DocumentBuilder的对象
c. doc=db.parse(new File(path));
//调用DocumentBuilder中的parse(File f) 方法将给定文件的内容解析为XML文档,并返回一个新的DOM Document对象。path指XML文件的存储路径。

2.展示XML里的数据
public void showInfo(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = 0; i < nodeList.getLength(); i++) {
Node nodeBrand=nodeList.item(i);
//把node节点转化为属性节点
Element elementBrand=(Element)nodeBrand;
String name=elementBrand.getAttribute(“name”);
System.out.println(name);
NodeList typeList=elementBrand.getChildNodes();
for (int j = 0; j < typeList.getLength(); j++) {
Node nodeType=typeList.item(j);
if(nodeType.getNodeType()==Node.ELEMENT_NODE){
Element elementType=(Element)nodeType;
String TypeName=elementType.getAttribute(“name”);
System.out.println(TypeName);
}
}
}
}

3.在XML内增加节点
public void add(){
//首先要创建一个节点
Element elementBrand=doc.createElement(“Brand”);
//给其属性赋值
elementBrand.setAttribute(“name”, “oppo”);
//创建一个type节点
Element elementType=doc.createElement(“TypeName”);
elementType.setAttribute(“name”, “oppor17”);
//添加父子关系
elementBrand.appendChild(elementType);
//添加Brand与父节点的关系
doc.getElementsByTagName(“PhoneInfo”).item(0).appendChild(elementBrand);
}

4.保存对XML的更改
public void save(String path){
//将写入dom的数据写入到文件
//得到转化器的工厂
TransformerFactory tff=TransformerFactory.newInstance();
Transformer tf=tff.newTransformer();
DOMSource dSource=new DOMSource(doc);
StreamResult sr=new StreamResult(new OutputStreamWriter(new FileOutputStream(path), “utf-8”));
tf.transform(dSource, sr);
}

5.删除节点信息
public void delete(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = nodeList.getLength()-1; i>=0 ; i–) {
Node nodeBand=nodeList.item(i);
Element elementBrand=(Element)nodeBand;
if(elementBrand.getAttribute(“name”).equals(“苹果”)){
//删除节点,根据父节点来删除子节点
elementBrand.getParentNode().removeChild(elementBrand);
}
}
}

6.给节点添加id
public void addId(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = 0; i < nodeList.getLength(); i++){
Node nodeBand=nodeList.item(i);
Element elementBrand=(Element)nodeBand;
elementBrand.setAttribute(“id”, i+1+"");
}
}

dom4j解析XML

1.获取dom对象
public void getDoc(String path){
SAXReader reader=new SAXReader();
try {
doc=reader.read(new File(path));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

2.展示所有的信息
public void showInfo(){
//获取根节点
Element element=doc.getRootElement();
Iterator iterator=element.elementIterator();
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
String str=element2.attributeValue(“name”);
System.out.println(str);
//得到子元素的迭代器
Iterator iterator2=element2.elementIterator();
while(iterator2.hasNext()){
Element e=(Element)iterator2.next();
String s=e.attributeValue(“name”);
System.out.println(s);
}
}
}

3.创建节点
public void add(){
//得到根节点
Element rootElement=doc.getRootElement();
//创建一个Brand节点
Element elementBrand=rootElement.addElement(“Brand”);
//设置属性
elementBrand.addAttribute(“name”, “苹果”);
//创建Type节点
Element elementType=elementBrand.addElement(“Type”);
//设置属性
elementType.addAttribute(“name”, “iphoneX”);

}

4.保存对XML的更改
public void save(String path){
try {
FileWriter fileWriter = new FileWriter(path);
//格式化
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding(“GBK”);
XMLWriter w=new XMLWriter(fileWriter,outputFormat);
w.write(doc);
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

5.删除节点
public void delete(){
Element rootElement=doc.getRootElement();
Iterator iterator=rootElement.elementIterator();
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
String str=element2.attributeValue(“name”);
if(str.equals(“苹果”)){
element2.getParent().remove(element2);
}
}
}

6.修改,增加id
public void update(){
Element rootElement=doc.getRootElement();
Iterator iterator=rootElement.elementIterator();
int i=1;
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
element2.addAttribute(“id”, i+"");
i++;
if(element2.attributeValue(“name”).equals(“华为”)){
element2.setAttributeValue(“name”, “华为荣耀”);
}
}
}

XML文件信息









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值