XML技术

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 1、XML是可扩展标记语言2、与操作系统和操作平台均无关3、规范统一,支持异构系统

XML简介

1、XML是可扩展标记语言
2、与操作系统和操作平台均无关
3、规范统一,支持异构系统

XML文档结构

1、XML声明

2、标签

元素名     元素属性名=“属性值”  元素内容

3、根元素

写在声明下面的标签元素,有且只有一个根元素

4、属性

一个元素可以有多个属性,多个属性之间用空格分开

注意:属性可以加在任何一个元素的其实标签上,但不能加在结束标签上,且不能包含特殊字符< " .&

5、特殊字符的处理

XML编写注意事项

XML命名空间

命名空间是在解析XML文档时,对于重名的元素,可能出现解析冲突,他们用来标识来自特定域(标准组织、公司、行业)的名称
除非带有前缀,否则属性属于他们的元素所在的命名空间

验证XML文档

DTD验证

DOM解析XML

1、步骤

(1)创建解析器工厂

DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

(2)创建解析器

DocumentBuilder builder =factory.newDocumentBuilder();

(3)获得Document

document=builder.parse("src/info.xml");

(4)创建解析器工厂

以Document对象为起点对DOM树的节点进行增加、删除、修改查询等操作

2、关键代码(包含增删该查操作)

package demo1;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Test1 {
  private Document document;
  /**
   * 创建Document对象
   * @throws IOException 
   * @throws Exception 
   */
  public void getDoc() throws Exception, IOException {
    //解析器工厂
    DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
    //创建解析器
    DocumentBuilder builder =factory.newDocumentBuilder();
    //获得Document
    document=builder.parse("src/info.xml");
  }
  /**
   * 保存XM
   * @throws Exception 
   */
  public void save() throws Exception {
    TransformerFactory factory =TransformerFactory.newInstance();
    factory.setAttribute("indent-number", 4);//天假空白
    Transformer transformer=factory.newTransformer();
    //设置格式
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty(OutputKeys.INDENT, "YES");
    DOMSource xmlSource =new DOMSource(document);
    StreamResult outputTarget =new StreamResult(new FileOutputStream("src/info.xml"));
    transformer.transform(xmlSource, outputTarget);
  }
  /**
   * 增加新手机节点
   * @throws Exception 
   */
  public void add() throws Exception {
    getDoc();
    Element eleBrand=document.createElement("Brand");
    eleBrand.setAttribute("name", "小米手机");
    //获得根元素
    Element root=(Element) document.getElementsByTagName("PhoneInfo").item(0);
    root.appendChild(eleBrand);
    save();
  }
  /**
   * 修改
   * @throws Exception 
   * @throws IOException 
   */
  public void change() throws IOException, Exception {
    getDoc();
    NodeList brands = document.getElementsByTagName("Brand");
    for (int i = 0; i < brands.getLength(); i++) {
      Node brandNode=brands.item(i);
      Element eleBrand =(Element) brandNode;
      String brandName =  eleBrand.getAttribute("name");
      if(brandName.equals("苹果")) {
        eleBrand.setAttribute("name", "apple");
        save();
      }
    }
  }
  /**
   * 删除
   * @throws Exception 
   * @throws IOException 
   */
  public void delate() throws Exception, Exception {
    getDoc();
    NodeList brands = document.getElementsByTagName("Brand");
    for (int i = 0; i < brands.getLength(); i++) {
      Node brandNode=brands.item(i);
      Element eleBrand =(Element) brandNode;
      String brandName =  eleBrand.getAttribute("name");
      if(brandName.equals("苹果")) {
        eleBrand.getParentNode().removeChild(eleBrand);
        save();
      }
    }
  }
  /**
   * 显示
   * @throws Exception 
   * @throws IOException 
   */
  public void show() throws IOException, Exception {
    getDoc();
    //获得brand节点
    NodeList brands=document.getElementsByTagName("Brand");
    for (int i = 0; i < brands.getLength(); i++) {
      Node brandNode =brands.item(i);
      Element eleBrand =(Element) brandNode;
      System.out.println(eleBrand.getAttribute("name"));
      //获得brand下的子节点
      NodeList types=eleBrand.getChildNodes();
      for (int j = 0; j < types.getLength(); j++) {
        Node typeNode=types.item(j);
        if(typeNode.getNodeType()==Node.ELEMENT_NODE) {
          Element eleType = (Element) typeNode;
          System.out.println("\t"+eleType.getAttribute("name"));
        }
      }
    }
  }
  public static void main(String[] args) throws IOException, Exception {
    Test1 t = new Test1();
    t.show();
    t.add();
    t.change();
    t.delate();
  }
}

3、注意区别这几个关键词

可操作整个DOM树

Node

代表节点(节点又分为元素节点、文本节点),其中元素节点又叫标签节点,是带有尖括号的,换行在XML中也被认为是节点

Element

元素节点,是Node的一个子类

Atteabute

凡是对属性进行操作的

item

从NodeList中获得Node,要通过循环遍历

dom4j

1、方法:

百度dom4j,看官方帮助文档,里面会有一系列的方法。

2、显示xml信息

public class Test1 {
  public static void main(String[] args) throws Exception {
    //获取domcument对象
    SAXReader reader = new SAXReader();
    Document doc =reader.read("src//info.xml");
    //获取根元素
    Element root =doc.getRootElement();
    //循环遍历输出子节点
    Iterator<Element> it=root.elementIterator();
    while(it.hasNext()) {
      Element brandEle = it.next();
      String strBrand=brandEle.attributeValue("name");
      Iterator<Element> it2=brandEle.elementIterator();
          while(it2.hasNext()){
            Element typeEle=it2.next();
            String strType=typeEle.attributeValue("name");
            System.out.println("品牌:"+strBrand+"\t"+"型号:"+strType);
          }
    }
  }
}

3、保存xml文件

//保存
     OutputFormat format =OutputFormat.createPrettyPrint();
     XMLWriter writer = new XMLWriter(new FileWriter("src//info.xml"),format);
         writer.write( doc );
         writer.close();

4、添加信息

//添加
    Element eleBrand = root.addElement("Brand");
    eleBrand.addAttribute("name", "小米");
    eleBrand.addText("这是小米手机");

5、修改&删除

// 修改
    Iterator<Element> it = root.elementIterator();
    while (it.hasNext()) {
      Element brandEle = it.next();
      Attribute att = brandEle.attribute("name");
      if (att.getValue().equals("三星")) {
        //修改
//        att.setValue("sanxing");
        //删除属性对象(包括属性名和属性值)
//        brandEle.remove(att);
        //删除整个brand三星
        brandEle.getParent().remove(brandEle);
      }
目录
相关文章
|
11天前
|
XML JavaScript 数据格式
XML 相关技术
XML 相关技术
|
3月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
169 1
|
5月前
|
XML Java 数据格式
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
39 1
|
3月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
111 0
|
6月前
|
XML 网络协议 Java
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
555 1
|
5月前
|
XML Java 数据库连接
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
175 0
|
5月前
|
XML 数据格式
程序技术好文:格式化xml
程序技术好文:格式化xml
94 0
|
XML 数据采集 Java
|
6月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
124 0
|
6月前
|
XML 安全 API
Python读写XML文件:深入解析与技术实现
Python读写XML文件:深入解析与技术实现
214 0