### W3C DOM操作知识点详解 #### 一、DOM与W3C标准 - **DOM (Document Object Model)**:是一种处理可扩展标记语言(如 XML 和 HTML)的标准接口。它定义了如何通过编程语言访问文档的结构、内容及属性。 - **W3C (World Wide Web Consortium)**:是制定Web标准的国际组织。W3C制定了一系列关于DOM的操作规范,旨在提高数据交换的一致性和互操作性。 #### 二、DOM操作XML示例解析 ##### 1. 读取XML文档 ```java public class DomReadDR { DocumentBuilderFactory factory; DocumentBuilder builder; Document doc; public DomReadDR() throws Exception { factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); doc = builder.parse("test.xml"); } public void Read() throws Exception { doc.normalize(); // 格式化文档,统一节点结构 NodeList links = doc.getElementsByTagName("song"); // 获取所有<song>节点 for (int i = 0; i < links.getLength(); i++) { Element link = (Element) links.item(i); // 转换为Element类型 System.out.println(link.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); // 输出<name>的值 System.out.println(link.getElementsByTagName("music-by").item(0).getFirstChild().getNodeValue()); // 输出<music-by>的值 } } } ``` - **解析**: - 使用`DocumentBuilderFactory`创建一个`DocumentBuilder`实例。 - 通过`DocumentBuilder`的`parse`方法解析XML文件。 - `normalize`方法用于格式化文档结构,确保节点树的一致性。 - `getElementsByTagName`方法获取特定名称的所有节点。 - `getFirstChild().getNodeValue()`用于获取文本节点的值。 ##### 2. 修改XML文档中的节点 ```java public int replaceNode(String nodeID, String nodeValue) { doc.normalize(); NodeList links = doc.getElementsByTagName("song"); boolean blfindNode = false; Element link = null; for (int i = 0; i < links.getLength(); i++) { link = (Element) links.item(i); if ((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)) { blfindNode = true; link.getElementsByTagName("music-by").item(0).getFirstChild().setNodeValue(nodeValue); break; } } if (!blfindNode) { return 1; // 没有找到该节点 } try { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty("encoding", "gb2312"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult("test.xml"); transformer.transform(source, result); } catch (javax.xml.transform.TransformerConfigurationException e) { e.printStackTrace(); System.out.println(e.getMessage()); return 3; // 写入异常 } catch (javax.xml.transform.TransformerException ex) { ex.printStackTrace(); return 3; } return 0; // 成功替换 } ``` - **解析**: - 遍历所有`<song>`节点,寻找具有指定`mId`的节点。 - 如果找到,则更新对应的`<music-by>`节点的值。 - 使用`Transformer`将修改后的`Document`对象写回XML文件。 - 设置编码格式为“gb2312”。 ##### 3. 删除XML文档中的节点 虽然题目中的部分内容没有给出删除节点的具体实现,但可以参考以下步骤来实现删除功能: ```java public int deleteNode(String nodeID) { doc.normalize(); NodeList links = doc.getElementsByTagName("song"); boolean blfindNode = false; Element link = null; for (int i = 0; i < links.getLength(); i++) { link = (Element) links.item(i); if ((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)) { blfindNode = true; link.getParentNode().removeChild(link); // 移除节点 break; } } if (!blfindNode) { return 1; // 没有找到该节点 } try { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult("test.xml"); transformer.transform(source, result); } catch (Exception e) { e.printStackTrace(); return 3; // 写入异常 } return 0; // 成功删除 } ``` - **解析**: - 类似于替换节点的过程,首先查找具有指定`mId`的`<song>`节点。 - 找到后,调用`getParentNode().removeChild(link)`来删除整个节点。 - 使用`Transformer`将更新后的文档写回到XML文件中。 ### 总结 本文详细介绍了基于W3C标准的DOM操作,包括读取、修改和删除XML文档中的节点。这些操作对于处理XML数据非常重要,可以帮助开发人员高效地管理和操作结构化的数据。通过对这些基本概念和技术的理解,开发者可以在实际项目中更好地应用DOM技术。
- zxczxcpj2018-04-08对我很有帮助 谢谢分享
- 粉丝: 7
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助