假设我有一个像这样的节点结构:
<Row>
<Column Name="Primary Number">1</Column>
<Column Name="Secondary Number">01</Column>
<Column Name="Text">This is all one sentence</Column>
<Row>
<Column Name="Primary Number">1</Column>
<Column Name="Secondary Number">02</Column>
<Column Name="Text">I would like to return</Column>
<Row>
<Column Name="Primary Number">1</Column>
<Column Name="Secondary Number">03</Column>
<Column Name="Text">as one string, in one xpath line</Column>
首先我想说这不是我的xml,也不是我帮助构建的。但是我不得不用它来检索我需要的信息....所以请帮忙。
所以我想使用一个 XPath 做的是返回一个字符串,其中包含来自所有 Primary Number=1 节点的所有 n 个文本字段的文本。
这可能使用 XPath 1.0 吗?
我有一个不太优雅的解决方案,但它只有在我知道辅助数字的确切数量时才有效,然后它只是一堆困惑的 concat()...
大家好,感谢大家的回复! 所以我想用这个字符串做的是使用 contains() 来搜索特定的关键字,但我发现了一个捷径,实际上有一个所有值的串联字符串来这样做,并且只需要分享它以防有人有一个类似的问题。 Tod 的提示对此有很大帮助,我只是向它添加了一个条件和 BAM 魔法。 在这里:
Table[@Name='TableName']/Row/Column[@Name='Text' and contains(text(),"keyword")][preceding-sibling::Column[@Name='Primary Number' and text()='15']]
因此,它所做的不是将所有节点值结果连接为一个字符串,然后在其上使用 contains(),而是分别在每一行中搜索单词,从而消除了对不可能的需要。 感谢大家的帮助,如果没有大家的热烈回应,我不可能做到这一点! (我会给每个人投票,但我太新了 :( )
最佳答案
这是在 XPath 2.0 中通过 string-join() 函数完成的。它可以在 XSLT 1.0 中使用 <xsl:for-each> 完成.但我不认为在没有宿主语言支持的情况下,它可以在纯 XPath 1.0 中完成。
关于xml - XPath 1.0 : Returning a string from multiple node results?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7809656/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
遍历nokogiri并使用xpath选择元素相当容易。我需要这个反之亦然,意思是:我需要例如在nokogiri节点上调用.to_xpath以获取元素的完整xpath以将其存储在记录中。有人知道这样做的方法吗? 最佳答案 我能想到的最简单的方法是:Nokogiri::CSS.xpath_fornode.css_path编辑:您也可以尝试使用path方法。 关于ruby-如何从nokogiri对象获取标识符(例如xpath)?,我们在StackOverflow上找到一个类似的问题:
我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::
我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi
这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::
我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att
我正在尝试使用Nokogiri和XPath从网站上抓取图像,但到目前为止收效甚微。对于其HTML具有img和src的典型网站,我可以使用:tmp2=Nokogiri::HTML(open(site_url))tmp2.xpath("//img/@src").eachdo|src|...dowhateverend但是,某些网站(如Amazon和eBay)仅使用JavaScript触发特定图像。如果我查看代码,我可以看到数组中的数据。例如,来自Amazon:P.when('jQuery','cf').execute(function($,cf){P.load.js('http://z-ec