博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xml文件
阅读量:5910 次
发布时间:2019-06-19

本文共 9525 字,大约阅读时间需要 31 分钟。

我是小黑黑
我是大黑黑
<>< ]]>
第一个xml文件

 

/**什么是标记???  计算机所能理解的一种信息符号!我们之前定义的变量,java中的基本数据类型=====理解成标记!xml:是一种可扩展的标记语言!  01.专注于保存数据,传输!不是显示数据!02.xml文件中的标签没有被定义,我们可以自定义标签名称!  
<学生 姓名="小白">03.自我描述性04.符合W3C标准的!Dom: 文档对象模型(Document Object Model):dom把xml文件映射成倒挂的树解析xml的4中解析器!Dom:基于xml文档树结构的解析!把文件的内容读取到内存中,比较占内存!消耗资源SAX:基于事件的解析!不需要将数据存储在内存中!占用资源少!JDom:第一个java特定模型! 2 8原则!本身不包含解析器!使用SAX2解析器来解析xml文件!Dom4j:是Jdom的一个分支!分享源代码! 性能优异!功能强大!
小黑
student:元素名age:属性名50:属性值小黑:元素内容特殊字符:< <> >& &' '" "CDATA:不被xml解析器解析! */

 

//根节点是 school 下面只能有teacher
//teacher可以有至少一个student节点
//teacher可以有多个,也可以没有
//teacher可以有1个,也可以没有
]>
创建一个dtd文件

 

创建一个xml引入dtd文件

 

 =====================DOM解析xml文件=================================

 

 

public class DomXml {    //声明文档树  static  Document document=null;        /**     * 使用Dom解析xml文件     */    public static void main(String[] args) {        getDom();         delPhone();    }        /**     * 获取dom树     */    public  static  void  getDom(){        try {            //01.创建解析器工厂            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();            //02.创建解析器            DocumentBuilder builder = factory.newDocumentBuilder();            //03.指定需要解析的xml文件  获得整个dom树            document = builder.parse("收藏信息.xml");            //04.获取xml文件的根节点            NodeList list = document.getElementsByTagName("Brand");            System.out.println("有几个Brand节点:"+list.getLength());            for (int i = 0; i < list.getLength(); i++) {                   Node node = list.item(i);                  Element element= (Element) node;                System.out.println("手机名称===》"+element.getAttribute("name"));                  //怎么获取手机下面的品牌信息                NodeList cList = element.getChildNodes();                for (int j = 0; j < cList.getLength(); j++) {                      Node cNode = cList.item(j);                      //先判断cNode是否是一个元素节点                      if (cNode.getNodeType()==Node.ELEMENT_NODE) {                          Element cElement= (Element) cNode;                          System.out.println("手机品牌===》"+cElement.getAttribute("name"));                    }                }            }        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (SAXException e) {            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    //把内存中的数据  保存在xml中    public static void saveXml()  {            try {                //???怎么把内存中的 节点 保存到xml中                //01.创建转换器工厂                TransformerFactory factory = TransformerFactory.newInstance();                //02.创建转换器对象                Transformer former = factory.newTransformer();                //这是我们输出格式                former.setOutputProperty("indent", "yes");                //03.从内存中 输出到  xml文件     输出流                DOMSource source=new DOMSource(document);                                StreamResult result=new StreamResult(new  OutputStreamWriter                        (new FileOutputStream("收藏信息.xml"), "utf-8"));                                former.transform(source, result);            } catch (TransformerConfigurationException e) {                e.printStackTrace();            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (TransformerException e) {                e.printStackTrace();            }        }        /**     * 新增手机信息     */    public  static void  addPhone(){         //在内存中首先  创建我们需要增加的 节点        Element element = document.createElement("Brand");        //增加属性        element.setAttribute("name", "金立");        //再创建一个节点   只有文档树可以创建节点        Element elementType = document.createElement("Type");        elementType.setAttribute("name", "金立555");        //把type节点放入Brand中        element.appendChild(elementType);        //获取根节点        document.getElementsByTagName("PhoneInfo").item(0).appendChild(element);        //以上的操作 全都是在 内存中!  并没有真正的保存到xml文件中        saveXml();  //shift +alt +M 选中的区域提取成方法    }    /**     * 修改手机信息     */    public  static  void  updatePhone(){        //获取需要修改的节点        NodeList list = document.getElementsByTagName("Brand");        //循环操作        for (int i = 0; i < list.getLength(); i++) {             Node node = list.item(i);             Element element=(Element) node;             if (element.getAttribute("name").equals("金立")) {                element.setAttribute("name", "三星");            }        }        //把内存中修改的数据 保存到xml        saveXml();    }        /**     * 删除指定的手机信息     */    public  static  void  delPhone(){        //获取需要修改的节点        NodeList list = document.getElementsByTagName("Brand");        //循环操作        for (int i = 0; i < list.getLength(); i++) {            Node node = list.item(i);            Element element=(Element) node;            if (element.getAttribute("name").equals("三星")) {                element.getParentNode().removeChild(element);            }        }        //把内存中删除的数据 保存到xml        saveXml();    }            }

 

public class Dom4jTest { // Dom4j解析xml    // 因为所有的方法都需要Dom树    static Document document = null;    static Element root = null;    public static void main(String[] args) {        // 获取dom树        getDocument();        // addPhone();        deletePhone();        updatePhone();        showPhone();    }    // 解析xml文件    public static void getDocument() {        SAXReader reader = new SAXReader();        try {            document = reader.read("收藏信息.xml");            root = document.getRootElement();// 获取根节点        } catch (DocumentException e) {            e.printStackTrace();        }    }    /**     * 显示所有的手机信息     */    public static void showPhone() {        // 遍历所有的节点        Iterator itBrand = root.elementIterator();        while (itBrand.hasNext()) {            Element brand = (Element) itBrand.next();            System.out.println("手机的品牌是:" + brand.attributeValue("name"));            System.out.println("手机的编号是:" + brand.attributeValue("id"));            System.out.println("===========下面是子节点============");            Iterator itType = brand.elementIterator();            while (itType.hasNext()) {
// 获取手机型号 Element type = (Element) itType.next(); System.out.println("手机的型号是:" + type.attributeValue("name")); // 输出文本节点的值 if (!type.getText().equals("")) { System.out.println(type.getTextTrim()); } } } } // 保存xml信息 public static void save(String path) { OutputFormat format = null; XMLWriter writer = null; try { // dom4j的转换器 不用使用 new   createPrettyPrint底层有 new format = OutputFormat.createPrettyPrint(); // 写入xml文件 writer = new XMLWriter(new FileWriter(path), format); writer.write(document); } catch (IOException e) { e.printStackTrace(); } finally { // 关流 try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } // 新增节点 public static void addPhone() { Element element = root.addElement("Brand"); // 节点设置属性 element.addAttribute("name", "黑莓"); // 节点下面新增子节点 Element type = element.addElement("Type"); type.addAttribute("name", "A1"); // 保存 省略 我们 节点之间的拼接! dom需要拼接 save("收藏信息.xml"); } // 删除 public static void deletePhone() { // 获取所有Brand Iterator brand = root.elementIterator(); while (brand.hasNext()) { Element element = (Element) brand.next(); // 拿到每一个Brand // 获取属性值 判断是不是 要删除的对象 if (element.attributeValue("name").equals("黑莓")) { element.getParent().remove(element); } } save("收藏信息.xml"); } // 修改 public static void updatePhone() { // 获取所有Brand Iterator brand = root.elementIterator(); while (brand.hasNext()) { Element element = (Element) brand.next(); // 拿到每一个Brand // 获取属性值 判断是不是 要修改的对象 if (element.attributeValue("name").equals("哇哈哈")) { element.attribute("name").setValue("哇哈哈哈哈"); } } save("收藏信息.xml"); }}
使用dom4j解析 需要引入需要的jar包

 

覆盖xml文件

public class ParseXml {                public static void main(String[] args) throws IOException {        saveXml("user.xml");    }    /**     *      * @param path  需要覆盖的xml文件     * @throws IOException     */    public static void  saveXml(String  path) throws IOException{        Document document=DocumentHelper.createDocument();  //创建一个dom对象         //给dom增加根节点        Element students = document.addElement("Students");        //在根节点下面增加 子节点        Element student = students.addElement("Student");        //给子节点增加属性        student.addAttribute("name","小黑");        //创建转换器工厂        OutputFormat format = OutputFormat.createPrettyPrint();        //设置编码格式        format.setEncoding("utf-8");        XMLWriter writer=new XMLWriter(new FileWriter(path), format);        //写入xml文件        writer.write(document);        //关闭流        writer.close();    }                }

 

转载于:https://www.cnblogs.com/xtdxs/p/7093969.html

你可能感兴趣的文章
项目实战-Api的解决方案
查看>>
前端面试题总结
查看>>
(三)从jvm层面了解线程的启动和停止
查看>>
SOA和微服务之间的区别
查看>>
IBM提出8位深度网络训练法,提速4倍同时保持高精度
查看>>
苹果发布Core ML 2
查看>>
“智能云”战略新品震撼发布,开发者如何快速上手?
查看>>
华为吴晟:分布式监控系统的设计与实现
查看>>
[deviceone开发]-do_Webview的基本示例
查看>>
亚马逊Alexa借助神经网络生成播音员声音
查看>>
比特大陆新一轮裁员50%,回应称系人员调整
查看>>
[nginx文档翻译系列] 控制nginx
查看>>
将 Measurements 和 Units 应用到物理学
查看>>
数据拷贝的实现
查看>>
关于责任和业务(r11笔记第60天)
查看>>
SQL优化常用方法44
查看>>
Alibaba Canal Manager Model 配置管理实现
查看>>
在浏览器中输入Google.com并且按下回车之后发生了什么?(转)
查看>>
Git 1.9.5.msysgit.1
查看>>
《 测试反模式:有效规避常见的92种测试陷阱》—— 2.2 测试类型相关陷阱
查看>>