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> ...
随机推荐
- docker概述与安装及运行容器
传统虚拟化 传统虚拟化步骤 1.安装虚拟化软件以及虚拟化的管理软件 2.创建虚拟机 3.给虚拟机安装os 4.在虚拟机内部不是应用(http.db之类的应用) 传统虚拟化的特点 1.VM与VM之间是完 ...
- Ecplise无法启动“failed to create the JAVA Virtual Machine”
打开Ecplise时报错:“failed to create the JAVA Virtual Machine”,java配制也没有问题,然后尝试运行eclipsec.exe,报错了另一个信息:“Co ...
- 十万级百万级数据量的Excel文件导入并写入数据库
一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后 ...
- python convert csv to xlsx
搬运:http://stackoverflow.com/questions/17684610/python-convert-csv-to-xlsx import os import glob impo ...
- 属性class与:class
1.官方的案例 我们可以传给 v-bind:class 一个对象,以动态地切换 class <div v-bind:class="{ active: isActive }"& ...
- Spring Boot Service注入为null mapper注入为null @Component注解下@Value获取不到值 WebsocketServer类里无法注入service
最近搞了一下websocket前台(这个网上有很多的教程这里就不班门弄斧啦) 以及前后台的交互 和后台的bug(搞了两天) 也是状态频发 bug不断 下面说一说问题. Websocket主类里面无法注 ...
- QUIC协议学习记录
QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验. Q ...
- 一条SQL在 MaxCompute 分布式系统中的旅程
摘要:2019杭州云栖大会大数据技术专场,由阿里云资深技术专家侯震宇.阿里云高级技术专家陈颖达以及阿里云资深技术专家戴谢宁共同以“SQL在 MaxCompute 分布式系统中的旅程 ”为题进行了演讲. ...
- vue常见面试题
什么是 mvvm? MVVM 是 Model-View-ViewModel 的缩写.mvvm 是一种设计思想.Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑:View ...
- Django中object.all是什么东西
前言 先抛出一个问题.银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),object在数据库中就相当于银 ...