tdom中selectNodes的使用
tdom中selectNodes的使用
*/-->
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
pre.src {background-color: #002b36; color: #839496;}
tdom中selectNodes的使用
Table of Contents
我们在使用xml的时候,经常需要通过一个唯一的标识ID来进行索引。我们通过查看tdom的帮助文档,其中明确说明了,有这么一个API: getElementById ,看起来就是通过一个标识ID来进行查找的。但实际上,这个是行不通的,后来搜索了google,这个是只有在parse的时候加了-html选项的时候才有效的。而html的解析规则标准要低一些,我们不推荐用这个规则去解析xml。
<?xml version="1.0" encoding="utf-8"?>
<root>
<group name="All xxx" id="#1">
<group name="A" id="#2">
</group>
<group name="B" id="#3">
</group>
<group name="C" id="#4">
</group>
</group>
</root>
那么,我们怎么快速方便的通过id属性找到我们想要的node呢?
1 递归查找
就是每次从根节点,递归查找每个node,然后,检查其中的id属性值是否相等,相等就返回。这个对于专门查找id这种具有唯一值的属性是没有问题的,但是这种做法,效率可能不高,另外不具有灵活性,万一我只想把当前层的某个值查找出来呢?把所有的值相等的都找出来呢?
2 使用selectNodes来进行查找
2.1 基本语法
selectNodes
-namespaces prefixUriList-cache <boolean>xpathQuertypeVarReturns the result of applying the XPath query xpathQuery to the subtree. This can be a string/value, a list of strings, a list of nodes or a list of attribute name / value pairs. If typeVar is given the result type name is stored into that variable (empty, bool, number, string, nodes, attrnodes or mixed).
中心思想就是使用其中的XPath规则来进行查找,其中的namespaces选项和cache选项还没有使用过,后面使用来再进行补充。这个XPath规则还是很有意思的,相当于我们的文件路径,这样它把查找xml中的node变为查找文件夹中的文件了。这里做个简单的类比,文件夹相当于xml中的父节点,文件夹的属性,相当于父节点中的attribute也是属性,文件夹中的文件相当于xml中的子节点(当然,这里的文件可以是文件也可以是文件夹,文件夹相当于递归下去),同样,它们也具有属性值。所以,我们可以简单的认为,其实我们的文件夹系统,抽象之后就是一个xml的。
2.2 XPath的规则
要使用XPath来进行查找,首先要了解XPath的使用规则:
- XPath和文件路径相似:也是使用 / 作为分隔符;
- 使用 [@attrName='attrValue'] 这种属性 名/值 对进行匹配,一定要注意其中的 '' 符号,把值包起来,否则无效;
- 可以使用 . 和 .. 来表示当前节点以下或者父节点一层,也和文件路径一致;
- 使用 // 两个 / 表示任意层级;
- 使用 * 作为通配符,但也只能单独使用,不能想glob命令或者正则表达式一样和其他字母组合到一起使用。
2.3 使用范例
从根节点通过属性 名/值 查找(通过使用 // 和 * ):
proc ::getXmlNodeByAttr {xmlNode attrName attrValue} {
return [$xmlNode selectNodes "//*\[@$attrName='$attrValue'\]"]
}从根节点通过属性 名/值 查找某个tagName(文件夹名称)中的节点:
proc getXmlNodeByTagAndAttr {xmlNode tagName attrName attrValue} {
return [$xmlNode selectNodes "//$tagName\[@$attrName='$attrValue'\]"]
}- 同理,也可以写出查找当前文件夹下的文件,当前文件夹及子文件夹中的文件类似的一系列函数,具体的实现很简单,就不一一实现了。
tdom中selectNodes的使用的更多相关文章
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- dom4j中 selectSingleNode 或selectNodes获取不到节点的原因总结 (转)
没想到搞个dom4j会出这么多怪错.. 最近在研究XBRL GL的有关内容,在项目中要求吧XBRL GL导入到11179注册库中,根据11179建立数据库,然后从XBRL GL分类标准中导入数据到数据 ...
- 在Vcl和FireMonkey应用程序中启用TXMLDocument 的XPath(selectNode,selectNodes)方法
该TXMLDocument的类让你来操作VCL和FireMonkey应用程序的XML文件,但这个类没有实现直接的方式来调用XPath的相关方法(selectNode,的selectNodes),所以你 ...
- XML 解析中 SelectSingleNode 与 SelectNodes 使用通配符介绍
俺是 XML XPath的新手,最近因为项目需要,研究了一下基本的两个函数 SelectSingleNode和SelectNodes 是如何实用通配符的,分享以下基本经验: 假设有段XML 如下所示: ...
- 读取xml数据装配到字典中之应用场景
前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...
- 读取xml数据装配到字典中
public Dictionary<string, string> GetXml() { Dictionary<string, string> dic = new Dictio ...
- 在Java中使用xpath对xml解析
xpath是一门在xml文档中查找信息的语言.xpath用于在XML文档中通过元素和属性进行导航.它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等.在学习本文档之前应该对XML的节点,元素 ...
- 关于XML中:XmlNode和XmlElement的涵义及不同之处
今天学习XML,遇到XmlNode和XmlElement俩个类,故有了下文的所述: 今天在做ASP.NET操作XML文档的过程中,发现了两个类:XmlNode和XmlElement.这两个类的功能极其 ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
随机推荐
- pytorch与numpy中的通道交换问题
pytorch网络输入图像的格式为(C, H, W),而numpy中的图像的shape为(H,W,C) 所以一般需要变换通道,将numpy中的shape变换为torch中的shape. 方法如下: # ...
- Spring Boot开启的2种方式
Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 <parent> < ...
- 牛客网挑战赛24 青蛙(BFS)
链接:https://www.nowcoder.com/acm/contest/157/E来源:牛客网 有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟.于是便开始踏上了旅途 一直这 ...
- BioGRID 互作数据库
01 — BioGRID BioGRID 是 Biological General Repository for Interactionh Datasets 的缩写(网址为 https://thebi ...
- PHP closedir() 函数
打开一个目录,读取它的内容,然后关闭: <?php$dir = "/images/"; // Open a directory, and read its contentsi ...
- MPU6050寄存器记录
参考资料:http://blog.sina.com.cn/s/blog_8240cbef01018i10.html 不过有一些寄存器没有写到,所以我自己加一点: 1)Register 25 - IN ...
- 【软工项目Beta阶段】博客目录
绝不划水队Beta冲刺阶段博客目录 一.Scrum Meeting 第十周会议记录 第十一周会议记录 二.测试报告 Beta阶段测试报告 三.习得的软工原理/方法/技能? (1)在进行OUC-Mark ...
- MySql 5.7.26(MySQL8)安装教程
近期更换服务器,在此再记录一遍mysql 安装教程 1.下载 https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-commu ...
- 1.zabbix编译安装(环境lnmp)
zabbix服务端安装 1.使用脚本安装.脚本内容如下.安装完用http://192.168.159.20/zabbix #!/bin/bash #使用说明,此版本是针对程序安装路径不在/opt/下的 ...
- 【Shiro】六、Apache Shiro Session管理
1.Session的介绍 关于Session 会话:从启动一个Session到关闭这个Session作为一个会话,是对客户端和服务器端交互的一种封装,带有时效性 会话的产生: 一般从容器中产生 Web ...