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 实战
创建镜像 docker pull ubuntu 创建容器 docker run -it -name web ubuntu /bin/bash 更新软件源信息 apt-get update 安装ssh ...
- 不小心执行了 rm -f,先别急着跑路
作者:justmine http://www.cnblogs.com/justmine/p/10359186.html 前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行 ...
- Codeforces 488D Strip (set+DP)
D. Strip time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- LeetCode Array Easy 219. Contains Duplicate II
---恢复内容开始--- Description Given an array of integers and an integer k, find out whether there are two ...
- win10定时任务
1.设置everything开机启动 电脑--管理
- H2数据库做单测数据库时踩到的坑
H2数据库用来做单测数据库,可以自定义初始化数据,不用担心数据库内容更改造成单测跑不过问题,不过H2数据库跟实际使用的Mysql还是有一定区别. 1. H2数据库不支持Mysql的批量更新功能,支持批 ...
- 数据库索引原理,及MySQL索引类型(转)
在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username ) NOT N ...
- C 给定路径遍历目录下的所有文件
在此之前需要了解 WIN32_FIND_DATA的结构 以及 FindFirstFile. FindNextFile原型以及用法注意事项传送门如下 https://msdn.microsoft.co ...
- permutations and combinations
# import itertools # # my_list = [1, 2, 3, 4, 5, 6] # # combinations = itertools.combinations(my_lis ...
- RAM/ROM IP一次性总结
1, 若需要修改memory mode, 需重新编译; 若不需要修改memory mode, 直接修改宏参数即可; 2, 宏参数列表: 3, 注意用LE搭memory的情况; 4, memory ty ...