eXtensible Markup Language: 可扩展标记型语言
标记型语言:也是使用标签来操作 可扩展:html里面的标签都是固定,每个标签都有特定的含义。标签可以自己定义,可以写中文的标签 <person></person>,<狗></狗>。xml用途:html是用于显示数据,xml也可以显示数据(不是主要功能)。xml主要功能是为了存储数据。xml是w3c组织发布的技术。xml有两个版本 1.0,1.1。使用的都是1.0(1.1不能向下兼容)。跟html里的差不多
可以解决多个字符都需要转义的操作,把这些内容放到CDATA区里面。
<b>if(a<b && b<c && c<d){}</b> // 写法 <![CDATA[ 内容 ]]>可以在xml中设置样式,设置样式只能对英文标签名称起作用。
<?xml-stylesheet type="text/css" href="xxx.css"?>在第一个<p1>下面(末尾)添加<sex>nv</sex>
// 在第一个p1下面(末尾)添加<sex>nv</sex> public static void addSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到第一个p1 * 5.创建sex标签 * 6.创建文本 * 7.把文本添加到sex下 * 8.把sex添加到第一个p1下 * 9.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到所有的p1 NodeList list = document.getElementsByTagName("p1"); // 得到第一个p1 Node p1 = list.item(0); // 创建sex标签 Element sex1 = document.createElement("sex"); // 创建文本 Text text1 = document.createTextNode("nv"); // 把文本添加到sex1下 sex1.appendChild(text1); // 把sex1添加到p1下 p1.appendChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }修改第一个<p1>下面的<sex>内容是nan
// 修改第一个p1下面的<sex>内容是nan public static void modifySex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.修改sex里面的值 * 6.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 修改sex值 sex1.setTextContent("nan"); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }删除<sex>nan</sex>节点
// 删除<sex>nan</sex>节点 public static void delSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.获取sex的父节点 * 6.使用sex的父节点删除sex * 7.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 得到sex的父节点 Node p1 = sex1.getParentNode(); p1.removeChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }把xml中的所有元素名称打印出来
// 遍历节点,把所有元素名称打印出来 public static void listEelment() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到根节点 * 5.得到根节点子节点 * 使用递归实现 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 编写一个方法实现遍历操作 list1(document); } private static void list1(Node node) { // 判断元素类型的时候才打印 if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); } // 得到一层子节点 NodeList list = node.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { // 得到每一个节点 Node node1 = list.item(i); list1(node1); } }