让 DOM 遍历

DOM 遍历 文档对象模型(DOM,Document Object Model)是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化表示,并定义了一种方式,允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM 遍历是指通过 DOM 树访问文档中的元素的过程。在本篇文章中,我们将深入探讨 DOM 遍历的概念、方法和应用。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> DOM Traversal 模块一瞥 Brett McLaughlin(brett@newInstance.com) Enhydra 策略顾问,Lutris Technologies 2001 年 8 月 “文档对象模型(DOM)”提供了有用的模块来以高级方式扩展其核心功能。本文深入研究了 DOM Traversal 模块,演示了如何查明您的语法分析器是否支持该模块以及如何使用它来遍历选中的节点集或整个 DOM 树。读完本文之后,您将彻底理解 DOM Traversal,并会在您的 Java 和 XML 编程工具箱中拥有一个强大的新工具。八个样本代码清单演示了这些技术。 如果您在过去三年中作过很多 XML 处理,那么您几乎一定遇到过“文档对象模型”(简称 DOM)。这种对象模型表示应用程序中的 XML 文档,并提供一种简单的方式来读取 XML 并写入或更改现有文档中的数据(如果您是 DOM 新手,请参阅参考资料来获得更多背景知识。)如果您正在努力成为一名 XML 高手,那您可能已经彻底地学过 DOM,并且知道如何使用它所提供的几乎每一种方法。然而,还有许多 DOM 功能没有被大多数开发人员认识到。 大多数开发人员实际都已接触过 DOM 核心。该核心指的是 DOM 规范,它概括 DOM 的含义、它应该如何操作以及提供哪些方法等等。甚至有经验的开发人员都不太知道或了解许多不太常用的 DOM 模块。这些模块允许开发人员更高效而轻松地使用树、同时处理不同的范围的节点、对 HTML 或 CSS 页面进行操作以及其它任务,所有这些都不是仅使用核心 DOM 规范可以做到的。在以后几个月中,我计划写几篇文章,详细介绍几个模块,包括 HTML 模块 — Range 模块 — 在本文中,将介绍 Traversal 模块。 通过学习如何使用 DOM Traversal,您将看到遍历整个 DOM 树、构建定制对象过滤器来轻易查找所需数据以及以前所未有的轻松方式遍历 DOM 树是多么快捷。我还将向您介绍一个实用程序,该程序允许您检查您选择的语法分析器是否支持特定的 DOM 模块,同时,我还将为您演示许多其它样本代码。那么,请启动您喜爱的源码编辑器,然后让我们开始。 获得信息 首先,确保您有所需工具来遍历一些示例代码。对于本文,您手头要有一个 XML 语法分析器。该语法分析器需要提供 DOM 实现。事实上,那很简单;几乎每一种您可以得到的 XML 语法分析器都支持 SAX(Simple API for XML)和 DOM。您要确保您所用的语法分析器具有 DOM 级别 2 支持,这很简单,只需阅读该语法分析器的发行说明或简单地从供应商处获得最新版本即可。 获得语法分析器之后,您需要确保它支持我们正在讨论的 DOM Traversal 模块。虽然这应该也可以在语法分析器文档中找到关于这方面的说明,但我想为您演示一个简单的编程方法来检查这一点。事实上,“清单 1”中演示的程序可以让您询问任何语法分析器:看它是否有任何模块。我在其中包括了大多数常见 DOM 模块的特定检查,当然包括 DOM Traversal。这个程序使用 DOM 类 org.w3c.dom.DOMImplementation 及其 hasFeature() 方法:通过传入每个模块的名称来检查是否支持这些模块,找出实际支持哪些模块很容易。代码相当简单,我把阅读程序流程的任务留给您。 清单 1. DOMModuleChecker 类 import org.w3c.dom.DOMImplementation; public class DOMModuleChecker { /** Vendor DOMImplementation impl class */ private String vendorImplementationClass = "org.apache.xerces.dom.DOMImplementationImpl"; /** Modules to check */ private String[] moduleNames = {"XML", "Views", "Events", "CSS", "Traversal", "Range", "HTML"}; public DOMModuleChecker() { } public DOMModuleChecker(String vendorImplementationClass) { this.vendorImplementationClass = vendorImplementationClass; } public void check() throws Exception { DOMImplementation impl = (DOMImplementation)Class.forName(vendorImplementationClass) .newInstance(); for (int i=0; i 清单 6 该清单将所有这些细节组织在一起,创建了一个搜索 XML 文档并打印出所有可搜索关键字的程序。 到目前为止,根据对其它清单的解释,您应该理解“清单 6”了。请编译此程序和清单 5 中的代码。然后,将清单 4 的内容保存为一个 XML 文档。我将我的这个文档命名为 keywords.xml。将 xerces.jar 添加到类路径和工作目录中,然后运行 KeywordSearcher 类。我知道我省略了最后一步的描述,但是如果您也是一名 Java 用户,就不应该有任何编译和设置方面的问题。在对您自己的 XML 目录副本运行这个类之后,应该得到类似于“清单 7”的结果。 清单 7. 运行关键字搜索程序 C:/javaxml2/ibm>java KeywordSearcher keywords.xml Processing file: keywords.xml Search phrase found: 'galaxy' Search phrase found: 'Hyperion' Search phrase found: 'dwarves' Search phrase found: 'hobbit' Search phrase found: 'Foundation' Search phrase found: 'Wheel of Time' Search phrase found: 'The Path of Daggers' 显然,随着文档越来越复杂,NodeFilter 实现也会相应地更加复杂。此处的要点在于,DOM Traversal 与这个小过滤器一样有用,它在更复杂的情况下会变得极其强大。例如,可以根据元素/属性名,在文档中查找表示成属性或元素的数据。对于核心 DOM 代码来说,这确实是个棘手的任务,它同样需要进行许多树的遍历,而 NodeIterator 则可以为您处理这些。因此,让您的想象力自由驰骋,并构筑那些过滤器吧! 在森林中查找树 在结束关于 DOM Traversal 的讲座之前,我要简短介绍一下 TreeWalker。由于篇幅所限(我希望这是一篇文章,而不只是一个章节),不想过于深入,但是因为您已经了解了 NodeIterator,这应该很简单。通过 清单 8 中的方法创建 TreeWalker: 如果认识到 TreeWalker 方法采用的参数与 createNodeFilter() 方法相同,那并不会引起什么问题。事实上,剩下的唯一问题是“迭代节点与遍历树有什么区别?”答案是:使用 TreeWalker 时,可以维护一个树结构。在使用 NodeIterator 时,返回的节点实际上已从其树中的初始位置分离。迭代节点使操作很快捷,因为一旦返回节点就废弃其树位置。但是,使用 TreeWalker 时,当节点从定制节点过滤器返回时,节点仍保留在它们的树上下文中。这就允许您可以实际通过过滤器来查看整个 XML 文档。 做一个练习,尝试编写一个程序来显示清单 4 中不带处理说明、注释或属性的 XML 文档。在开始前,有一个提示:首先,要使用 TreeWalker 来确保保留树格式。其次,编写一个定制的 NodeFilter 实现,以便只接受元素或文本类型的节点。最后,使用清单 6 中的程序作为模板,并更改几行代码。然后,就像那样,您自己就得到了一个定制的 DOM 树视图。如果您理解了节点部分并且可以编写出这个样本程序,那么您正在成为 DOM Traversal 高手的路上顺利前进。 希望您一直都在看 Traversal 模块所展示的所有可能性。以过滤方式遍历 DOM 树使得寻找元素、属性、文本和其它 DOM 结构变得容易。您还应该能够使用 DOM Traversal 模块编写更有效、结构更好的代码。因此,采用一个现有的搜索 DOM 树的程序,然后转换它,使其使用 traversal 方法;我知道您将对该结果感到满意。同以往一样,请让我知道本文是否对您有所帮助(使用本文所附的论坛),咱们网上见。 关于作者 Brett McLaughlin (brett@newInstance.com) 是 Lutris Technologies 的 Enhydra 策略顾问和分布式系统体系结构方面的专家。他是《Java 和 XML》(O'Reilly) 的作者。他参与了如 Java Servlet、Enterprise JavaBean 技术、XML 和商家对商家应用程序等技术的研究。他与 Jason Hunter 一起发起了 JDOM 项目,该项目为从 Java 应用程序中操纵 XML 提供了一个简单的 API。他还是 Apache Cocoon 项目和 EJBoss EJB 服务器的活跃开发人员以及 Apache Turbine 项目的共同创始人之一。
SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定 本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。 阅读详情

相关推荐

Goldwasser-Micali 公钥加密系统

1、二次剩余问题 对于整数n ,定义Zn∗={a∈Zn,gcd(a,n)=1}Z^*_n=\{ a∈Z_n,gcd(a,n) =1\}Zn∗​={a∈Zn​,gcd(a,n)=1} 。当存在d∈Znd \in Z_nd∈Zn​ ,使得 d2≡a mod nd^2 \equiv a \, mod \,nd2≡amodn ,称 a 为模 n 的二次剩余;否则称 a 为模 n的二次非剩余。判断 a 是否为模 n 的二次剩余的问题称为模n 的二次剩余问题。 \rule[-10pt]{14.3cm}{0.05em}

不染心的博客 4316

Flex中XML遍历

public static function Traversal(xml:XML, target:String):void{ var list:XMLList = xml.children(); for each( var xmlChildren:XML in list) { if(xmlChildren["xml中的节点"] == target) ...

iteye_21079的博客 240

Diffusion:如何从噪声中生成清晰图像

扩散模型是当前AI图像生成领域的核心基础,如Stable Diffusion、DALL·E等热门模型均采用该技术。其原理分为训练和推理两个阶段:训练时通过逐步加噪图片,让AI学习如何去除噪声;推理时则从随机噪声出发,结合文本提示逐步去噪生成清晰图像。模型架构通常包含文本编码器、生成模型(如U-Net)和解码器三部分,通过多轮迭代将低维潜在空间表示转化为最终图像。这种技术模拟了艺术家从混沌中雕琢作品的过程,实现了从随机噪声到目标图像的智能生成。

laumy的学习笔记 1276

Java写动态XML_java – 如何动态更新另一个xml文件中的xml...

这是你想要的代码DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();DocumentBuilder docBuilder = docFactory.newDocumentBuilder();Document doc = docBuilder.parse("/home/riddhish/developerw...

weixin_28961645的博客 145

Ubuntu24.04LTS上Ollama GPU加速配置指南:从驱动安装到多卡均衡负载

本文详细介绍了在Ubuntu24.04LTS系统上配置Ollama GPU加速的完整指南,包括NVIDIA驱动安装、CUDA Toolkit配置、Ollama在线与离线安装方法,以及多GPU负载均衡优化策略。通过实战案例和性能调优建议,帮助开发者充分利用硬件资源提升大型语言模型的运行效率。

weixin_29255731的博客 761

Opencv计算相机响应函数(Camera Response Function)与Radiance

本文主要用于记录自己在学习CRF过程中遇到的一些问题。 CRF模型 I=f(V(t⋅L))I=f(V( t\cdot L))I=f(V(t⋅L)) 其中III为相机灰度值Intensity,LLL为环境中irradiance,ttt为曝光时间,VVV为相机镜头参数,fff为相机响应函数CRF。 有些论文中认为相机镜头参数是线性的不考虑,但有些考虑了衰减即靠近图像边缘亮度会暗一些,但没有看到二者同时计算的,如果同时计算两个非线性的函数,我觉得可能会有不确定性,在这里还请教一下了解的朋友。 控制

larrydong的博客 6002

遍历xml循环节点

public void analysisXML() throws DocumentException { SAXReader saxread = new SAXReader(); File xmlFile = new File("idcMonitor.xml"); if (xmlFile.exists()) { Documen...

Emine 8494

元宇宙通证- 九、IT/ICT发展史全景长图

九、IT/ICT发展史全景长图 (一)综述 IT是Information Technology的缩写,意为”信息技术“,包含现代计算机、网络、通信等信息领域技术。自1844年人类历史上发出来第一份电报,实现了信息的长图传输,信息技术发展的历史大幕随之拉开。信息技术的普遍应用,是进入信息社会的标志。 IT技术最早发源于半导体,然后发展处计算机、通信网和互联网,进而演进到现在的AI、XR、计算机、大数据、物联网、工业互联网、区块链、量子计算等。 有人说元宇宙是下一代互联网,有人说元宇宙是互联网的终极形态。 我们

沧海之巅的专栏 1万+

Java采用DOM方式递归遍历XML文件内容

例子中的XML文件内容如下: 冰与火之歌 乔治马丁 2014 89 安徒生童话 2004 89 English

SZStudy的博客 1938

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5271

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1260

DOM遍历

前面的话   DOM遍历模块定义了用于辅助完成顺序遍历DOM结构的类型:Nodeiterator和TreeWalker,它们能够基于给定的起点对DOM结构执行深度优先(depth-first)的遍历操作。本文将详细介绍DOM遍历   [注意]IE8-浏览器不支持   定义   DOM遍历是深度优先的DOM结构遍历,遍历以给定节点为根,不可能向上超出DOM树的根节点。以下面的HTML页面为

z93f37fj的专栏 279

Lammps实现甲烷与水的竞争吸附-循环不同气体分子

Lammps实现甲烷与水的竞争吸附

Rockyoung 5376

DOM树的遍历

一,遍历DOM树的分析思路 1.先获取整个页面的Dom节点:foot=document.documentElement; 2.后创建一个函数用于遍历Dom树 : 此函数需要传进一个参数,此参数是html文档中的根节点 然后在调用一个用于求节点的子节点的函数 3.创建节点的子节点的函数: 此函数需要一个参数,用...

生活步步是坎坷,笑到最后是大哥 1129

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

超详细的DOM进阶之DOM遍历,一定要看哦

前言: DOM遍历,可以简单理解为“查找元素”的意思。举个例子,如果你使用getElementById()等方法获取一个元素,然后又想得到该元素的父元素,子元素,甚至是下一个兄弟元素,这就是DOM遍历,分为三种情况: 查找父元素 查找子元素 查找兄弟元素 DOM遍历也就是查找元素,主要以“当前多选元素”为基点,然后查找它的父元素,子元素或者兄弟元素。 1.查找父元素 在JavaScript总,我...

ch_musk的博客 1129

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

dom树的遍历

HTML代码 <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta name="keywords" content="扫描dom树" /> <meta key="description" content="简单的小demo" /> <meta key="a...

devJan的博客 407

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【DOM】遍历

DOM 遍历

liuxiaoqi_123的博客 755

DOM的遍历

一.DOM的遍历 1. 父元素查找 children 返回(元素)子节点 console.log(box.children);//HTMLCollection(3) [div.box1, div.box2, ul.list] childNode 返回子节点(包含文本(空)节点) console.log(box.childNodes);//NodeList(7) [text, div.box1, text, div.box2, text, ul.list, text] firs...

wuxingwuyou的博客 1178

浅谈DOM遍历

DOM的遍历是深度优先的DOM结构遍历,那么什么是深度优先遍历。简而言之,首先访问出发点v,对纵深方向搜索。详细请百度。 在“DOM2级遍历和范围”模块中,定义了两种用于遍历DOM结构的类型:NodeIterator和TreeWalker ,这两个属性在IE8以上支持,火狐1及更高版本、Safari1.3及更高版本,Opera7.6及更高版本,谷歌0.2及更高版本支持。 NodeIterato

WEB_YH的博客 2252

dom遍历html文档,DOM 遍历

jQuery - DOM 遍历jQuery 是一个非常强大的工具,提供了各种各样的 DOM 遍历方法来帮助我们在文档中以随机的连续的方式选择元素。大部分的 DOM 遍历方法不修改 jQuery 对象,它们是用于从一个基于给定条件的文档中过滤元素的。通过索引找到元素 ——考虑一个简单的文档,带有下述 HTML 内容 ——The JQuery Examplelist item 1list item 2...

weixin_39991055的博客 242

JavaScript 实现 DOM树 的遍历

普通二叉树的遍历 function Tree() { var Node = function(key){ this.key = key; this.left = null; this.right = null; } root =null; } 前序遍历

ll_xiaohanqing_91的博客 7069

遍历DOM的方式

以如下html代码为例: <div id="content"> <h3>我是标题</h3> <p> <span>我是span内容1</span> <span>我是span内容2</span> </p> </div> 1.比...

海阔天空 477
上一篇: Java 语言导学(原书第3版)
下一篇: 怎样成为优秀的软件模型设计者的25条
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值