XML

可拓展的标记语言
树状结构
语法:

{ 
               <?xml version="1.0" encoding="UTF-8"?>
                 <students>
                <students id="1235">
                    <name>李四</name>
                    <age>16</age>
                </students>
                <--注释-->
                <students id="2535">
                    <name>张三</name>
                <age>18</age>
            </students>
            </students>

}

XML的约束
dtd schema约束

DOM:Document 文档对象模型(XML文档中使用对象来表示)
使用JavaScript操作HTML 使用java代码操作XML

在XML中 一切皆节点
Node(节点)
Document 文档节点(XML文件)
Element 元素节点(使用<>表示标签)
Attr 属性节点(元素上属性名=“属性值”)
Text 文本节点(元素之间的内容)

在加载的时候,整个XML加载进内存。在内存中形成一棵树(Document对象),我们以后用代码操作Document,其实操作的是内存中的DOM树,和本地磁盘中的XML文件没有直接的关系,所以要做同步操作(把内存中的数据更新到XML文件,)增 删 改 操作之后 都需要做同步操作
(注)使用impot导入类或者接口 要使用org.w3c组织的
/******************************
如何获取DOM文档对象
必须先得到呗操作XML文件的路径
步骤
1):获取Document文档对象
//创建工厂类
DocumentBuilderFactory factor=DocumentBuilderFactory.newInstance();
//用工厂创建一个DocumentBuilder类
DocumentBuilder dbr=factor.newDocumentBuilder();
//用DocumentBuilder创建一个Document取解析XML文件
Document doc=dbr.parse(f);
System.out.println(doc);
//2):获取XML中的根元素
Element ele=doc.getDocumentElement();
//3):获取第二个人元素
Element ele1=(Element) ele.getElementsByTagName(“teachers”).item(1);
//4):获取子元素
Element name1=(Element) ele1.getElementsByTagName(“name”).item(0);
//5):获取元素的文本
String namee=name1.getTextContent();
System.out.println(namee);

//改第一个人的年纪
    //获取第一个人的元素
    Element ele0=(Element) ele.getElementsByTagName("teacher").item(0);
    //获取第一个人的年纪元素
    Element age0=(Element) ele0.getElementsByTagName("age").item(0);
    age0.setTextContent("13");      
    System.out.println(age0.getTextContent());
    //必须做同步操作 把内存中的数据同步更新到磁盘中
    //获取同步方法类 Transformer
    Transformer ts=TransformerFactory.newInstance().newTransformer();
    Source xmlSource=new DOMSource(doc);//源:内存中的Document对象

    Result outputTarget=new StreamResult(f);
    ts.transform(xmlSource, outputTarget);

/************
//向XML中新增一个元素
//从根元素开始
//创建一个元素的片段
//创建元素
Element el0=doc.createElement(“teacher”);
Element el=doc.createElement(“name”);
Element el1=doc.createElement(“age”);
//给片段设置文本内容
el.setTextContent(“张武”);
el1.setTextContent(“16”);
//把元素设立关系 (子元素 父元素)
el0.appendChild(el1);
el0.appendChild(el1);
//把片段作为根元素的子元素
ele.appendChild(el0);
//同步操作
Transformer tsf=TransformerFactory.newInstance().newTransformer();
Source xmlSource1=new DOMSource(doc);//源:内存中的Document对象
Result outputTarget1=new StreamResult(f);
tsf.transform(xmlSource1, outputTarget1);

//操作属性
//操作属性
//获取第二个人的属性的值
String i=ele1.getAttribute(“id”);//获取属性值
System.out.println(i);
ele1.setAttribute(“id”, “3”);//设置属性值
//同步
Transformer tsf1=TransformerFactory.newInstance().newTransformer();
Source xmlSource2=new DOMSource(doc);//源:内存中的Document对象
Result outputTarget2=new StreamResult(f);
tsf1.transform(xmlSource2, outputTarget2);
//

//删除元素
//删除元素操作
//找到要删除的元素(从根元素删除子元素)
ele.removeChild(ele1);
ele1.removeAttribute(“age”);//从元素删除属性

    //当无XML文件的时候 在内存中创建
    DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
    //f存在就解析  不存在就创建
    Document dc=null;
    if(f.exists())
       dc=builder.parse(f);
    else{
        dc=builder.newDocument();
        //创建根元素 并作为文档的的子元素
        dc.appendChild(dc.createElement("daa"));

    }

/*********************************************
Dom4j

private File f=new File(“F:/JAVA/课程练习/XmlTrain/NewFile1.xml”);
@Test
public void testDom4j() throws Exception {

    //解析
    SAXReader reader=new SAXReader();
    //文档doc获取
    Document doc=reader.read(f);
    //获取跟元素
    Element root=doc.getRootElement();
    //获取根元素下的所有元素
    List<Element> listele=root.elements("teacher");
    for (Element element : listele) {
        System.out.println(element);
        //获取每个子元素的名字元素
        /*Element nameel=element.element("name");
        String str=nameel.getText();*/
        String str=element.elementText("name");
        System.out.println(str);
        //获取属性
        String strId=element.attributeValue("id");
        //设置元素
        Attribute strId1=element.attribute("id");
        strId1.setText("5");

    }
}
//增加
@Test
public void testname() throws Exception {
    //获取文档对象
    SAXReader reader=new SAXReader();
    Document doc=reader.read(f);
    //获取根元素
    Element root=doc.getRootElement();
    //创建teacher并给root当子元素
    Element ele=root.addElement("teacher");
    //创建ele的子元素  name age 
    ele.addElement("name").setText("张li");
    ele.addElement("age").setText("16");
    //同步
    FileWriter out=new FileWriter(f);
    doc.write(out);
    out.close();
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值