xml 可扩展标记语言,标签都是自定义的,什么是标记呢?就是一个记录,不需要编译的
html:超文本标记语言
html与xml的区别:
html:是预定义
xml:标签是你任意发挥发挥
html:主要用于页面展示
xml:存数据
最新的html5 跨平台开发 最火的一个就是html5=html4.0+xml
xml的基本结构:
每一个的xml 第一行都是申明,version:第一个是版本号,encoding:第二个是设置其编码格式
下面那一部分就是文档的描述 元素节点 属性节点 文本节点
XML编写注意事项
1.所有 XML 元素都须有关闭标签
2.XML 标签对大小写敏感
3.XML 必须正确地嵌套,尽量避免用特殊符号
4.XML 第一个必须有一个根元素
5.XML 的属性值须加引号
6.XML 命名必须遵循驼峰命名
XML 验证解析器与非验证解析
检查语法这些都是非验证解析
验证性解析:主要为了检查dtd文件,(就相当于导包 )
命名空间
1.使用前缀来避免命名冲突:
2.使用命名空间(Namespaces):
解析XML 转化为一个dom对象 dom解析(web) dom4j(就是对dom 的一个封装) sax
得到doc对象:
通过得到doc解析器工厂得到doc工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
得到doc工厂
DocumentBuilder db=dbf.newDocumentBuilder();
把文件的路径转化一个文件的对象file
File f=new File(“src/phone.xml”);
Document doc==db.parse(f);
获取元素节点:getElementsByTagName()(获取到的是一个数组)
例:NodeList nodeList=doc.getElementsByTagName(“Brand”);
获取到每一个节点:item();(返回的是Object类型.一般都是强转为(Element)类型)
例:Node item = nodeList.item(i);
添加一个新属性:setAttribute(String name, String value);
例:e.setAttribute(“id”,(i+1)+”“);
按名称检索属性值:getAttribute(String name);
父类节点:getParentNode()
删除子节点:removeChild(代入要删除的节点)
创建子节点:createElement(”要创建节点的名字”);
例:Element elementBrand = doc.createElement(“Brand”);
添加子节点:appendChild()
父类的 子类的
例:elementBrand.appendChild(elementType);
得到把数据写入在XML的工厂:
例:TransformerFactory tff=TransformerFactory.newInstance();
通过工厂得到转换器:
例:Transformer tf = tff.newTransformer();
设置一个对转换有效的输出属性:setOutputProperty(String name, String value)
OutputKeys.ENCODING:输出的编码是
例:tf.setOutputProperty(OutputKeys.ENCODING, “utf-8”);
//得到source 对象
DOMSource domSource=new DOMSource(doc);
//得到result对象
StreamResult st=new StreamResult(new OutputStreamWriter(new FileOutputStream(path), “utf-8”));
//进行转换
tf.transform(domSource, st);
DOM4J
创建saxReader对象
SAXReader reader = new SAXReader();
通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File(“src/phone.xml”));
得到根节点,也就是拿到xml里面的phones
Element e = doc.getRootElement();
转化成迭代器
Iterator iterator = e.elementIterator();
根据父节点删除子节点
ele.getParent().remove(ele);
添加节点:
Element elementBrand = e.addElement(“Brand”);
给节点来设置值:(setAttributeValue()这方法淘汰了,不过还可以用)
elementBrand.setAttributeValue(“name”, “华为”);
通过name来得到具体的值:
String attributeValue = elementBrand.attributeValue(“name”);