精华内容
下载资源
问答
  • dom4j读写xml文档实例

    2019-03-16 01:07:59
    NULL 博文链接:https://sxpujs.iteye.com/blog/375485
  • 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作。Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了
  • DOM4J 读取xml字符串

    2019-03-19 01:59:06
    NULL 博文链接:https://navylee.iteye.com/blog/727103
  • 利用dom4j--读取xml文件

    2016-07-29 11:29:23
    利用dom4j--读取xml文件。 代码简洁易懂。
  • 使用DOM4J读取XML文件

    千次阅读 2017-11-27 13:56:11
    使用 dom4j 读取xml 文件中的内容


    xml 文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <Response>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3501</GBCODE>
          <ID>3.0</ID>
          <LAT>26.089380264282227</LAT>
          <LON>119.29959869384766</LON>
          <NAME>福州市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3502</GBCODE>
          <ID>8.0</ID>
          <LAT>24.47445297241211</LAT>
          <LON>118.08509826660156</LON>
          <NAME>厦门市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3503</GBCODE>
          <ID>4.0</ID>
          <LAT>25.431852340698242</LAT>
          <LON>119.01676940917969</LON>
          <NAME>莆田市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3504</GBCODE>
          <ID>2.0</ID>
          <LAT>26.263587951660156</LAT>
          <LON>117.63680267333984</LON>
          <NAME>三明市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3505</GBCODE>
          <ID>6.0</ID>
          <LAT>24.92544937133789</LAT>
          <LON>118.5958023071289</LON>
          <NAME>泉州市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3506</GBCODE>
          <ID>7.0</ID>
          <LAT>24.51365089416504</LAT>
          <LON>117.67692565917969</LON>
          <NAME>漳州市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3507</GBCODE>
          <ID>1.0</ID>
          <LAT>26.646291732788086</LAT>
          <LON>118.1758041381836</LON>
          <NAME>南平市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3508</GBCODE>
          <ID>5.0</ID>
          <LAT>25.100685119628906</LAT>
          <LON>117.03483581542969</LON>
          <NAME>龙岩市</NAME>
       </e>
       <e>
          <CLASS>2.0</CLASS>
          <GBCODE>3509</GBCODE>
          <ID>0.0</ID>
          <LAT>26.66749382019043</LAT>
          <LON>119.52592468261719</LON>
          <NAME>宁德市</NAME>
       </e>
    </Response>



    使用dom4j 读取上述XML内容:


    在pom 加入 dom4j.jar  的依赖

        <dependency>
          <groupId>dom4j</groupId>
          <artifactId>dom4j</artifactId>
          <version>1.6.1</version>
        </dependency>

    Java代码:

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import java.io.File;
    import java.util.Iterator;
    
    /**
     * 解析XML文件
     */
    public class XmlReader {
    
        public static void main(String[] args) {
            String xmlFile = "C:\\Users\\thinkpad\\Desktop\\福建省各市经纬度.xml";
            readXml(xmlFile);
        }
    
        public static void readXml(String xmlPath){
            File file = new File(xmlPath);
            SAXReader reader = new SAXReader();
            try {
                Document document = reader.read(file);
                Element root = document.getRootElement();
                Element foo;
                Iterator i = root.elementIterator("e");
                while (i.hasNext()){
                    foo = (Element)i.next();
                    System.out.println("CLASS:"+foo.elementText("CLASS"));
                    System.out.println("GBCODE:"+foo.elementText("GBCODE"));
                    System.out.println("ID:"+foo.elementText("ID"));
                    System.out.println("LAT:"+foo.elementText("LAT"));
                    System.out.println("LON:"+foo.elementText("LON"));
                    System.out.println("NAME:"+foo.elementText("NAME"));
                    System.out.println("==============================\n");
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    }

    运行结果:

    CLASS:2.0
    GBCODE:3501
    ID:3.0
    LAT:26.089380264282227
    LON:119.29959869384766
    NAME:福州市
    ==============================
    
    CLASS:2.0
    GBCODE:3502
    ID:8.0
    LAT:24.47445297241211
    LON:118.08509826660156
    NAME:厦门市
    ==============================
    
    CLASS:2.0
    GBCODE:3503
    ID:4.0
    LAT:25.431852340698242
    LON:119.01676940917969
    NAME:莆田市
    ==============================
    
    CLASS:2.0
    GBCODE:3504
    ID:2.0
    LAT:26.263587951660156
    LON:117.63680267333984
    NAME:三明市
    ==============================
    
    CLASS:2.0
    GBCODE:3505
    ID:6.0
    LAT:24.92544937133789
    LON:118.5958023071289
    NAME:泉州市
    ==============================
    
    CLASS:2.0
    GBCODE:3506
    ID:7.0
    LAT:24.51365089416504
    LON:117.67692565917969
    NAME:漳州市
    ==============================
    
    CLASS:2.0
    GBCODE:3507
    ID:1.0
    LAT:26.646291732788086
    LON:118.1758041381836
    NAME:南平市
    ==============================
    
    CLASS:2.0
    GBCODE:3508
    ID:5.0
    LAT:25.100685119628906
    LON:117.03483581542969
    NAME:龙岩市
    ==============================
    
    CLASS:2.0
    GBCODE:3509
    ID:0.0
    LAT:26.66749382019043
    LON:119.52592468261719
    NAME:宁德市
    ==============================



    展开全文
  • JAVA使用dom4j读取xml文件 在java的项目中,我们可能会使用xml文件来保存一些配置或信息,下面记录如何从xml文件读取值 一、导入dom4j的jar包 从maven的镜像库https://mvnrepository.com/ 搜索dom4j,选择使用...

    JAVA使用dom4j读取xml文件

    在java的项目中,我们可能会使用到xml文件来保存一些配置或信息,下面记录如何从xml文件读取值

    一、导入dom4j的jar包

    从maven的镜像库https://mvnrepository.com/ 搜索dom4j,选择使用最多的选项—点击进去同样选择使用最多的选项—复制坐标,添加到maven项目的pom.xml包当中

    二、使用步骤

    1.引入库

    代码如下(示例):

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    

    2.读取步骤

    代码如下(示例):

    // 方法中演示
    private static void initMimeMapping() {
    		SAXReader reader = new SAXReader();
    		try {
    			// 读取xml文件,获取文档结构
    			Document doc = reader.read("./conf/web.xml");
    			// 获取文件根节点
    			Element root = doc.getRootElement();
    			// 获取根节点下所有mime-mapping的节点,返回值是Element类型的列表
    			List<Element> eleEnt = root.elements("mime-mapping");
    			// 利用新循环结构,循环读取mime-mapping节点
    			for(Element e : eleEnt) {
    				// 直接获取extension和mime-type子节点的值
    				String key = e.elementText("extension");
    				String value = e.elementText("mime-type");
    				// 将读取出来的信息,添加到Map列表中
    				MIME_MAPPING.put(key,value);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    
    展开全文
  • 本篇文章主要介绍了java中利用Dom4j解析和生成XML文档dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异、功能强大、和非常方便使用的特点。有兴趣的可以了解一下。
  • 使用DOM4J读取xml

    千次阅读 2018-07-04 07:54:33
    ----------------------------------使用DOM4J读取xml-------------------------------------DOM4J概述 1 DOM4J是什么DOM4J是针对Java开发人员专门提供的XML文档解析规范,它不同与DOM,但与DOM相似。DOM4J针对...

    ----------------------------------使用DOM4J读取xml-------------------------------------

    DOM4J概述

     

    1 DOM4J是什么

    DOM4J是针对Java开发人员专门提供的XML文档解析规范,它不同与DOM,但与DOM相似。DOM4J针对Java开发人员而设计,所以对于Java开发人员来说,使用DOM4J要比使用DOM更加方便。

    DOM4J对DOM和SAX提供了支持,使用DOM4J可以把org.dom4j.document转换成org.w3c.Document,DOM4J也支持基于SAX的事件驱动处理模式。

    使用者需要注意,DOM4J解析的结果是org.dom4j.Document,而不是org.w3c.Document。DOM4J与DOM一样,只是一组规范(接口与抽象类组成),底层必须要有DOM4J解析器的实现来支持。

    DOM4J使用JAXP来查找SAX解析器,然后把XML文档解析为org.dom4j.Document对象。它还支持使用org.w3c.Document来转换为org.dom4j.Docment对象。

     

    2 DOM4J中的类结构

    在DOM4J中,也有Node、Document、Element等接口,结构上与DOM中的接口比较相似。但还是有很多的区别:


    在DOM4J中,所有XML组成部分都是一个Node,其中Branch表示可以包含子节点的节点,例如Document和Element都是可以有子节点的,它们都是Branch的子接口。

    Attribute是属性节点,CharacterData是文本节点,文本节点有三个子接口,分别是CDATA、Text、Comment。

     

    3 DOM4J获取Document对象

      使用DOM4J来加载XML文档,需要先获取SAXReader对象,然后通过SAXReader对象的read()方法来加载XML文档:

     

           SAXReader reader = new SAXReader();

    //     reader.setValidation(true);

           Document doc = reader.read("src/students.xml");

     

    4 DOM4J保存Document对象

    保存Document对象需要使用XMLWriter对象的write()方法来完成,在创建XMLWriter时还可以为其指定XML文档的格式(缩进字符串以及是否换行),这需要使用OutputFormat来指定。

     

           doc.addDocType("students", "", "students.dtd");

           OutputFormat format = new OutputFormat("\t", true);

           format.setEncoding("UTF-8");

           XMLWriter writer = new XMLWriter(new FileWriter(xmlName), format);

           writer.write(doc);

           writer.close();

     

    5 DOM4J创建Document对象

      DocumentHelper类有很多的createXXX()方法,用来创建各种Node对象。

     

           Document doc = DocumentHelper.createDocument();

     

    代码示例:

    读取person.xml文件的信息

    Person.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <persons>

        <person id="p1" gender="">

            <name>刘备</name>

            <age>27</age>

            <address>蜀国</address>

        </person>

        <person id="p2" gender="">

            <name>张飞</name>

            <age>22</age>

            <address>蜀国</address>

        </person>

        <person id="p3" gender="">

            <name>关羽</name>

            <age>25</age>

            <address>蜀国</address>

        </person>

    </persons>

     

    DOM4J代码示例:

    package cn.tx.dom4j;

     

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.util.List;

     

    import org.dom4j.Attribute;

    import org.dom4j.Document;

    import org.dom4j.Element;

    import org.dom4j.io.SAXReader;

     

    public class ReadXML {

     

          

           /**

            * 读取xml文件的方法

            */

           public static void readXML() {

                  //创建xml文档读取dom4j的对象

                  SAXReader reader = new SAXReader();

                  //创建文档流

                  FileInputStream in = null;

                  try {

                         in = new FileInputStream("src/person.xml");

                         //读取文档,返回文档对象

                         Document doc = reader.read(in);

                         //获得文档对象的根元素

                         Element root = doc.getRootElement();

                         System.out.println(root);

                         //获得元素名称

                         String elementName = root.getName();

                         System.out.println(elementName);

                         //获得根元素下的孩子元素

                         List<Element> eList = root.elements();

                         //遍历子元素

                         for(Element element:eList) {

                                //System.out.println(element);

                                //获取元素的名字

                                String eleName = element.getName();

                                System.out.println(eleName);

                               

                                //通过属性名,直接从元素中取得属性的值

                                String idVal = element.attributeValue("id");

                                String genderVal = element.attributeValue("gender");

                                System.out.println("ID="+idVal+"   性别="+genderVal);

                                /*

                                //在知道属性名字的情况下获得元素的属性

                                Attribute idAttr = element.attribute("id");

                                Attribute genderAttr = element.attribute("gender");

                               

                                //获得元素的所有属性,在不知道属性名字的情况下

                                List<Attribute> aList = element.attributes();

                                //遍历每一个元素的属性

                                for(Attribute attr:aList) {

                                       //获得属性名字

                                       String attrName = attr.getName();

                                       //获得属性值

                                       //String attVal = attr.getText()

                                       String attVal = attr.getValue();

                                       System.out.println(attrName+"="+attVal);

                                }*/

                         }

                  } catch (Exception e) {

                         e.printStackTrace();

                  } finally {

                         try {

                                if(in != null) {

                                in.close();

                                }

                         } catch (IOException e) {

                                e.printStackTrace();

                         }

                  }

           }

          

           /**

            * 读取xml文件的方法,获取子元素

            */

           public static void readXML1() {

                  //创建xml文档读取dom4j的对象

                  SAXReader reader = new SAXReader();

                  //创建文档流

                  FileInputStream in = null;

                  try {

                         in = new FileInputStream("src/person.xml");

                         //读取文档,返回文档对象

                         Document doc = reader.read(in);

                         //获得文档对象的根元素

                         Element root = doc.getRootElement();

                         System.out.println(root);

                         //获得元素名称

                         String elementName = root.getName();

                         System.out.println(elementName);

                         //获得根元素下的孩子元素

                         List<Element> eList = root.elements();

                         for (Element element : eList) {

                                //获得每一个person的子元素

                                //Element ename = element.element("name");

                                //System.out.println(ename.getText());

                                List<Element> eleList = element.elements();

                                //遍历每一个person下的子元素

                                for (Element ele : eleList) {

                                       String eleName = ele.getName();

                                       //获得子元素的文本内容

                                       String eleText = ele.getText();

                                       System.out.println(eleName+":"+eleText);

                                }

                         }

                        

                  } catch (Exception e) {

                         e.printStackTrace();

                  } finally {

                         try {

                                if(in != null) {

                                in.close();

                                }

                         } catch (IOException e) {

                                e.printStackTrace();

                         }

            }

           }

    }

     

    代码示例2

    将person.xml中的属性写入到person类中

    先建立一个Person类

    package cn.tx.dom4j;

     

    public class Person {

     

           private Integer id;

          

           private String name;

          

           private Integer age;

          

           private String gender;

          

           private String address;

     

           public Integer getId() {

                  return id;

           }

     

           public void setId(Integer id) {

                  this.id = id;

           }

     

           public String getName() {

                  return name;

           }

     

           public void setName(String name) {

                  this.name = name;

           }

     

           public Integer getAge() {

                  return age;

           }

     

           public void setAge(Integer age) {

                  this.age = age;

           }

     

           public String getGender() {

                  return gender;

           }

     

           public void setGender(String gender) {

                  this.gender = gender;

           }

     

           public String getAddress() {

                  return address;

           }

     

           public void setAddress(String address) {

                  this.address = address;

           }

     

           @Override

           public String toString() {

                  return "Person [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + ", address=" + address

                                + "]";

           }

          

          

    }

     

    带使用DOM4J写入信息

    package cn.tx.dom4j;

     

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.List;

     

    import org.dom4j.Document;

    import org.dom4j.Element;

    import org.dom4j.io.SAXReader;

     

    public class ReadXML2 {

     

           public static void main(String[] args) {

                  readXML2();

           }

          

           /**

            * 读取xml文件,并且写入到person集合中,返回person集合

            */

           public static List<Person> readXML2() {

                  //创建一个存储Person对象的集合

                  List<Person> pList = new ArrayList<Person>();

                  //创建xml文档读取dom4j的对象

                  SAXReader reader = new SAXReader();

                  //创建文档流

                  FileInputStream in = null;

                  try {

                         in = new FileInputStream("src/person.xml");

                         //读取文档,返回文档对象

                         Document doc = reader.read(in);

                         //获得文档对象的根元素

                         Element root = doc.getRootElement();

                         //获得元素名称

                         String elementName = root.getName();

                         //获得根元素下的孩子元素

                         List<Element> eList = root.elements();

                         //遍历子元素

                         for(Element element:eList) {

                                //获得person元素的属性值

                                String idVal = element.attributeValue("id");

                                String genderVal = element.attributeValue("gender");

                                //创建person对象并且赋值

                                System.out.println("创建person对象");

                                Person p = new Person();

                                p.setId(idVal);

                                p.setGender(genderVal);

                                //获得person下子元素的内容

                               

                                /*String nameText = element.element("name").getText();

                                String ageText = element.element("age").getText();

                                String addressText = element.element("address").getText();*/

                               

                    //根据父元素获得指定子元素的内容

                                String nameText = element.elementText("name");

                                String ageText = element.elementText("age");

                                String addressText = element.elementText("address");

                                //将Person下子元素的内容写入到person对象中

                                p.setName(nameText);

                                p.setAge(new Integer(ageText));

                                p.setAddress(addressText);

                                //将Person对象加入集合中

                                pList.add(p);

                                System.out.println("person加入集合");

                         }

                         //打印person集合

                         for (Person p : pList) {

                                System.out.println(p);

                         }

                  } catch (Exception e) {

                         e.printStackTrace();

                  } finally {

                         try {

                                if(in != null) {

                                in.close();

                                }

                         } catch (IOException e) {

                                e.printStackTrace();

                         }

                  }

                  //返回Person集合

                  return pList;

           }

    }

     

    展开全文
  • dom4j解析xml嵌套格式

    2019-08-06 01:09:05
    NULL 博文链接:https://nbh219.iteye.com/blog/2075553
  • JAVA使用Dom4j获取XML文件的内容

    千次阅读 2018-10-15 13:44:45
    1.xml文件内容 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;car&gt; &lt;value&gt; &lt;name&gt;奔驰&lt;/name&gt; &lt;price&...

    1.xml文件内容

    <?xml version="1.0" encoding="UTF-8"?>
    <car>
    	<value>
    		<name>奔驰</name>
    		<price>100万</price>
    	</value>
    	<value>
    		<name>别克</name>
    		<price>15万</price>
    	</value>
    </car>

    2.java代码

    package Test;
    
    import java.io.File;
    import java.util.Iterator;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Dom4jByXmlTest {
    
    	public static void main(String[] args) {
    		// 解析xml文件
    		// 创建SAXReader的对象
    		SAXReader reader = new SAXReader();
    		try {
    			// 通过reader对象的read方法加载xml文件 ,获取docuement对象
    			Document document = reader.read(new File("car.xml"));
    
    			// 通过document对象获取根节点car
    			Element car = document.getRootElement();
    			// 通过element对象的elmentIterator方法获取迭代器
    
    			Iterator it = car.elementIterator();
    
    			// 遍历迭代器,获取根节点中的信息
    			while (it.hasNext()) {
    				System.out.println("==========开始遍历===========");
    				Element value1 = (Element) it.next();
    				//查看value1的节点名称
    				System.out.println("节点名:" + value1.getName());
    
    				// 解析子节点的信息
    				Iterator itt = value1.elementIterator();
    
    				while (itt.hasNext()) {
    					Element carChild = (Element) itt.next();
    					System.out.println("节点名:" + carChild.getName() + "-----节点值:" + carChild.getStringValue());
    				}
    
    				System.out.println("==========结束遍历===========");
    
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    
    }
    

    3.实现

    展开全文
  • dom4j读取XML文件详解

    2020-08-28 18:26:14
    主要为大家详细介绍了dom4j读取XML文件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。...
  • 主要为大家详细介绍了Java使用DOM4j实现读写XML文件的属性和元素,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java利用dom4j读写xml文件的简易实现

    万次阅读 2016-12-04 23:45:14
    利用dom4j读写xml文件.
  • 本文主要介绍了java使用dom4j读取配置文件实现抽象工厂和反射的示例,在Java中也可以同Donet一样,将差异配置在配置文件里面。另外,我们采用下面的方式实现,将会更加便捷
  • 详细介绍了使用Dom4j进行xml文件读取方法
  • 上一篇已经介绍了如何使用dom4j对xml进行读取解析,现在谈谈怎么使用dom4j操作xml文件的输出。 首先去下载个DOM4J的jar包,以下两个网站选一个吧,下载后导入项目 http://www.jdom.org/docs/apidocs/index.html ...
  • 使用dom4j读取xml四种方法,希望对各位朋友有所帮助
  • dom4j-XML解析.zip

    2020-07-17 00:06:01
    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
  • 基于dom4j读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
  • 使用Dom4j解析XML

    2020-06-21 16:03:01
    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. &...
  • 今天的需求是读取xml文件,根据现有的实体bean修改xml文件参数。 首先我们需要引入dom4j的依赖,如下: <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId...
  • NULL 博文链接:https://qiaokeli.iteye.com/blog/1790138
  • dom4j以String的方式读取XML的内容,并给String的值赋值,写入XML
  • NULL 博文链接:https://yulon.iteye.com/blog/547635
  • 怎么使用new SAXReader().setEntityResolver()方法去除xml检验? 求具体的代码块?
  • 使用dom4j读写XML文件

    2017-08-12 10:38:05
    XML:可扩展标记语言。 XML应用于web开发的许多方面,也常常用于做程序的配置文件。 HTML相信很多学习编程的人都听说过,HTML就是XML的一个分支。 使用dom4j完成对XML文件读写
  • dom4j解析xml

    2017-06-28 18:10:53
    使用dom4jxml文档进行增删改. 查询就不用说了,使用elements(....)/element(...)/attributeValue()/getText()等方法
  • 使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档...
  •   xml文件说白了就是一个有规则的记事本文件(万物皆可文本),它里面有成对的标签,通常我们解析一个记事本时,就是直接读取,其实针对xml也可以直接读取,但是太麻烦了,为啥不针对它自身的一些性质,再集成一些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,223
精华内容 32,889
关键字:

使用dom4j读取xml文件