- 浏览: 2565462 次
- 性别:
- 来自: 苏州
-
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
本例主要涉及三点:
1、计算XML中各个节点的数量
2、输出符合特定条件的XML
3、使用sum
首先,我们来看下使用XPath计算XML中各个节点的数量。
include REXML
def index xml = <<XML <root> <a> <name>ayz</name> <b> <c>g234</c> </b> </a> <a> <name>aerd</name> <b> <c>g554</c> <c>g564</c> <c>g664</c> </b> <b> <c>g5544</c> </b> </a> <a> <name>cyz</name> <b> <c>g734</c> </b> </a> </root> XML doc = Document.new(xml) #输出a节点的数量 a_num = XPath.first(doc.root, 'count(//a)') #输出b节点的数量 b_num = XPath.first(doc.root, 'count(//b)') #输出c节点的数量 c_num = XPath.first(doc.root, 'count(//c)') #输出d节点的数量 d_num = XPath.first(doc.root, 'count(//d)') puts a_num # => 3 puts b_num # => 4 puts c_num # => 6 puts d_num # => 0 end
接着,来看下使用XPath输出符合特定条件的XML。
#输出所有a节点下b节点的数量小于2的b节点及其子节点 b_node = XPath.match(doc.root, '//a[count(b) < 2]/b') #输出所有b节点下c节点的数量小于3的c节点 c_node = XPath.match(doc.root, '//a[count(b//c) < 3]/b/c') puts b_node # => <b> # <c>g234</c> # </b> # <b> # <c>g734</c> # </b> puts c_node # => <c>g234</c> # <c>g734</c>
xml = <<XML <root> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> <item>6</item> <item>7</item> </root> XML doc = Document.new(xml) #输出位置为3和4的节点 node = XPath.match(doc.root,'item[position() > 2 and position() < 5]') puts node # => <item>3</item> # <item>4</item>
xml = <<XML <root> <summary><task>clean bathroom</task></summary> <records> <x> <summary><task>clean bath</task></summary> <records> <x><summary><task>rinse surfaces with water</task></summary><records/></x> <x><summary><task>apply pine fresh flash cleaner</task></summary><records/></x> </records> </x> <x> <summary><task>clean sink</task></summary> <records> <x><summary><task>remove items around the sink</task></summary><records/></x> <x><summary><task>using a sponge apply warm water to the sink surfaces</task></summary><records/></x> </records> </x> <x><summary><task>mop the floor</task></summary>records/></x> </records> </root> XML document = Document.new(xml) titles = [] document.root.each_recursive do |elem| #输出所有task节点的内容 titles << elem.text.to_s if elem.name == "task" end puts titles #clean bathroom #clean bath #rinse surfaces with water #apply pine fresh flash cleaner #clean sink #remove items around the sink #using a sponge apply warm water to the sink surfaces #mop the floor
xml = <<XML <list> <link>www.linux.com</link> <link>http://www.rubyforge.org</link> <link>www.learningruby.com</link> <link>http://snippets.dzone.com</link> </list> XML Document.new(xml).root.elements.each("link[starts-with(., 'http')]") do |node| puts node.text # => http://www.rubyforge.org # http://snippets.dzone.com end
doc = Document.new("<a1><b1>3</b1><b1>5</b1><b1>1</b1><b1>7</b1><b1>9</b1></a1>") a = doc.root.elements.to_a.sort {|x, y| x.text.to_s <=> y.text.to_s} a.each {|x| puts x} # => <b1>1</b1> # <b1>3</b1> # <b1>5</b1> # <b1>7</b1> # <b1>9</b1>
xml = <<XML <task> <summary><tags>reth, etrert, rtj64f, sitto</tags></summary> <records> <task> <summary><tags>retert, etert, rtu4f, sitto</tags></summary> <records> <task> <summary> <name>abcdef</name> <tags>jjy, rf57, lgk78</tags> </summary> <records> </records> </task> </records> </task> </records> </task> XML doc = Document.new(xml) doc.root.elements.each('//tags') {|element| element.parent.delete(element)} puts doc #<task> # <summary/> # <records> # <task> # <summary/> # <records> # <task> # <summary> # <name>abcdef</name> # </summary> # <records> # </records> # </task> # </records> # </task> # </records> #</task>
xml = <<XML <entries> <entry id='93391' catid='0701'></entry> <entry id='93394' catid='0701'></entry> <entry id='93397' catid='0304'></entry> <entry id='93400' catid='0506'></entry> <entry id='94396' catid='0701'></entry> <entry id='95398' catid='0701'></entry> <entry id='95610' catid='0506'></entry> </entries> XML document = Document.new(xml) puts document.root.elements['entry[last()]'] # => <entry id='95610' catid='0506'/> p document.root.elements.each('entry/@catid').collect {|d| d.value}.uniq # => ["0701", "0304", "0506"]
xml = "<a><records><bun id='1'/><bun id='2'/><bun id='3'/><bun id='4'/></records></a>" doc = Document.new(xml) node_cake = Element.new("cake") node_bun = doc.root.elements['records/*[1]'] node_bun.parent.insert_before(node_bun, node_cake) puts doc #<a><records><cake/><bun id='1'/><bun id='2'/><bun id='3'/><bun id='4'/></records></a>
doc = Document.new("<a><b>format's<c>just fine</c></b><b3><c/></b3></a>") c = doc.root.elements.each('//c'){} puts c #<c>just fine</c> #<c/>
最后,我们来看下关于sum的例子。
items = <<ITEMS <items> <item>2</item> <item>4</item> </items> ITEMS puts Document.new(items).root.elements['sum(item)'] # => 6.0
items = <<ITEMS <items> <item1>2</item1><item2>10</item2> <item1>4</item1><item2>20</item2> </items> ITEMS puts Document.new(items).root.elements['sum(item1 + item2)'] # => 12.0 puts Document.new(items).root.elements['sum(item1[1] + item2[1])'] # => 12.0 puts Document.new(items).root.elements['sum(item1[2] + item2[2])'] # => 24.0 puts Document.new(items).root.elements['sum(sum(item1) + sum(item2))'] # => 36.0
发表评论
-
Redmine集成知识库
2013-08-26 22:25 33391、下载redmine的知识库插件:redmine_know ... -
Redmine集成SVN
2013-08-20 20:13 54331、进入redmine目录下的config目录,我的是/Ap ... -
Redmine集成CKEditor
2013-08-15 21:08 4443Redmine的文本格式默认只支持textile,对于普通 ... -
如何使用Assets Pipeline
2011-11-21 16:13 2018Rails 3.1之前,所有资源文件都放在public的子目录 ... -
Rails console显示执行的Sql语句
2011-11-18 08:49 1946调试Active Record时经常会用到rails cons ... -
migrate中使用bigint
2011-11-14 10:40 2078使用mysql时,integer最大是10位。如果想存储更大的 ... -
rails中使用UUID
2011-11-08 08:44 2784可以将uuid的包拷贝到vendor/plugins下,或者在 ... -
Rails里删除Prototype改用JQuery的方法
2011-11-02 10:55 1570首先在Gemfile中添加jquery的gem gem ... -
ActionView::Template::Error (***.css isn’t precompiled)
2011-10-24 11:10 2552升级到Rails 3.1后,当rails s -e produ ... -
Rails Bundle简介
2011-10-21 09:00 1637Rails 3开始使用bundle来管理项目的gem依赖。该命 ... -
非WEB程序中使用Active Record
2011-10-18 16:08 1503一、新建一个Ruby文件 require " ... -
Rails中使用多选框
2011-10-14 10:10 2372<%= select_tag("tag_ids ... -
Could not find a JavaScript runtime
2011-10-13 13:17 1725Rails3.1下报出下面的错误: /gems/exe ... -
通过POP3读取邮件
2011-10-06 01:36 1637require 'net/pop' pop ... -
观察者模式
2011-10-01 16:24 1588require 'observer' class ... -
ruby1.9的中文问题
2011-09-29 08:31 1880STATUS = { "0" =&g ... -
列出所有的控制器以及方法名
2011-09-27 10:43 1645controllers = Dir.new("#{R ... -
abort的使用
2011-09-22 13:30 1580很多人可能会这样用: def stop_error(m ... -
rails3中mysql2的安装
2011-09-20 16:01 2120rails3中默认的mysql适配器是mysql2,执行以下命 ... -
让查询变得更优雅
2011-09-19 20:19 1147RailsWhere可以让代码变得更简洁。 看一 ...
相关推荐
此外,XPath还支持函数,如count()计算节点数量,string()获取节点的字符串值,normalize-space()去除空格等。 对于“用XPath精确定位节点元素”的主题,掌握以下几个关键点至关重要: 1. **基础语法**:理解路径...
XPath还支持更复杂的表达式,比如选取满足特定条件的节点,或者计算节点集合的长度。例如: - `//element[condition]`:选取所有满足条件的`element`节点。 - `count(//element)`:计算`element`节点的数量。 - `...
- `count()`, `sum()`, `avg()` 计算节点数量、值之和或平均值。 8. **XPath版本差异**: - XPath 1.0 是最基础的版本,XPath 2.0 引入了更多功能,如类型系统、函数库的扩展等。 - XPath 3.1 添加了更多的新...
此外,XPath还支持函数操作,如"count()"计算节点数量,"text()"获取节点的文本内容。 在进行XPath测试时,开发者通常需要考虑以下几点: 1. **节点选择**:确保XPath表达式能准确选取目标节点,如选取所有`<book>`...
XPath还支持许多高级功能,例如函数和运算符,允许我们进行更复杂的查询,如选取具有特定属性的元素、计算节点数量、提取文本内容等。例如,我们可以使用`@attributeName`来选取具有特定属性的元素,或者使用`count...
4. 函数应用:XPath内置了一些函数,如`text()`返回节点的文本内容,`count()`计算节点数量,`contains()`检查字符串是否包含特定子串等。 5. 数组和集合操作:XPath支持选取多个节点,并可以对这些节点进行操作,如...
比如 `count()` 可计算节点数量,`contains()` 检查字符串是否包含特定子串。 了解基本概念后,查看网页元素的 XPath 通常通过以下方法: 1. **开发者工具**:大多数现代浏览器(如 Chrome、Firefox)都内置了...
XPath还提供了一系列的函数,如`text()`用于获取节点的文本内容,`count()`用于计算节点的数量,以及`contains()`用于判断字符串是否包含特定子串。 安装XPath Helper的步骤非常简单。你只需要将下载的压缩包解压,...
例如,`count()`计算节点的数量,`string()`将节点转换为字符串,`concat()`连接字符串,`contains()`检查字符串是否包含另一个字符串,`normalize-space()`去除字符串两端的空白,以及许多其他功能强大的函数。...
8. **函数**:XPath提供了丰富的内置函数,如 `count()` 计算节点数量,`substring()` 截取字符串,`normalize-space()` 去除字符串两端空格等。 在你的实例文件 `book.xml` 中,你可能会有一个结构化的XML文档,...
6. **函数和操作符**:XPath还提供了许多内置函数,如`count()`计算节点数量,`contains()`检查字符串包含性,以及比较操作符(`=`、`>`、`等)。 使用XPath-helper谷歌插件,你可以在网页上直接高亮显示匹配的节点...
在本篇(part10)中,我们将深入探讨XPath中的节点集、谓词、并运算以及与函数的使用。 首先,节点集是XPath中一个重要的概念,它是一组由XPath表达式选取的节点。例如,`/html//li` 将选取HTML文档中所有的`<li>`...
另外,还可以使用函数来处理节点集,如`count()`计算节点数量,`concat()`连接字符串,`normalize-space()`去除空白等。 综上所述,XPath测试程序结合HtmlAgilityPack,为.NET开发者提供了一种高效、灵活的方式来...
5. **函数应用**:XPath包含一系列内建函数,如`count()`、`concat()`、`normalize-space()`等,可以用于计算节点数量、组合字符串或清理空白字符。 在C#中,`System.Xml.XPath`命名空间提供了对XPath的支持。主要...
例如,`concat(string1, string2)`用于连接两个字符串,`count(node-set)`计算节点集的节点数量,`normalize-space(text)`用于去除文本中的空白。 7. **版本差异**:XPath有1.0和2.0等多个版本,每个版本都增加了...
- **函数与操作符**:XPath内置许多函数,如count()计算节点数量,substring()截取字符串,以及比较操作符(=、!=、<、>等)。 3. **Java中的XPath应用** - **Java的XPath API**:Java标准库提供`javax.xml.xpath...
XPath还包含了一系列内置函数,如`count()`计算节点数量,`contains()`检查文本是否包含指定字符串等。 在实际应用中,XPath Helper不仅限于爬虫,还可以用于网页自动化测试,比如Selenium WebDriver。在测试场景中...
7. **函数库**:XPath内建了丰富的函数库,如`count()`, `concat()`, `substring()`, `normalize-space()`等,用于计算节点数量、拼接字符串、提取子串和去除空白等。 8. **版本差异**:XPath有1.0和2.0两个主要...
此外,XPath 还提供函数库,比如 `text()` 用于获取节点的文本内容,`count()` 计算节点数量,以及 `contains()` 检查字符串是否包含特定子串。 XPath 在实际应用中广泛用于 XSLT(XSL 转换)中,用来从源 XML 文档...