Tag: xml

对于2.4MB XML文件,您会推荐哪个Ruby XML库?

我有一个2.4 MB的XML文件,从Microsoft Project导出(嘿,我是这里的受害者!),我要求我提取重新呈现的某些细节。 忽略请求的智能或其他方面,我应该首先从Ruby的角度尝试哪个库? 我知道以下内容(没有特别的顺序): REXML Chilkat Ruby XML库 hpricot XML 的libxml 我更喜欢打包成Rubygem的东西,我怀疑Chilkat库不是。 性能不是一个主要问题 – 我不认为每天需要运行一次以上(每周一次更有可能)。 我对那些与XML相关的东西一样容易使用的东西更感兴趣。 编辑:我尝试了gem的: hpricot是一个国家英里,最简单。 例如,要在此XML中提取SaveVersion标记的内容(保存在名为’test.xml’的文件中) 12 采取这样的事情: doc = Hpricot.XML(open(‘test.xml’)) version = (doc/:Project/:SaveVersion).first.inner_html hpricot似乎对名称空间相对漠不关心,在这个例子中很好:只有一个,但可能是复杂文档的问题。 由于hpricot也非常慢,我宁愿想象这将是一个解决自己的问题。 libxml-ruby的速度提高了一个数量级,了解命名空间(我需要花费几个小时来解决这个问题)并且完全接近XML金属 – XPath查询和所有其他内容都在那里。 如果像我一样,只有在极端胁迫的条件下才能打开XML文档,这不一定是好事。 帮助器模块主要用于提供有效处理默认命名空间的示例。 这大致是我最终得到的结论(我不以任何方式断言它的美丽,正确性或其他价值,它就在我现在的位置): xml_parser = XML::Parser.new xml_parser.string = File.read(path) doc = xml_parser.parse @root = doc.root @scopes = { :in_node => ”, :in_root […]

从“strings / that / are / paths”数组构建XML树(在Ruby中)

如果你有一个字符串路径数组,在Ruby中构建XML树的最佳方法是什么? paths = [ “nodeA1”, “nodeA1/nodeB1/nodeC1”, “nodeA1/nodeB1/nodeC1/nodeD1/nodeE1”, “nodeA1/nodeB1/nodeC2”, “nodeA1/nodeB2/nodeC2”, “nodeA3/nodeB2/nodeC3” ] xml = 我的第一个想法是将路径字符串拆分为一个数组,并将其深度和内容与前一个数组进行比较,但是如果我到达路径“nodeA1 / nodeB1 / nodeC1 / nodeD1 / nodeE1”,当我回到“nodeA1 / nodeB1 / nodeC2”,[1]节点是共同的祖先,但跟踪它是混乱的,至少我这样做的方式。 我也想让它递归,所以我可以在它自己的函数中处理每个嵌套级别,但还没有达到任何半通用的解决方案。 当你遇到这个问题时,你们常常做的任何想法或事情? 谢谢! 长矛

如何将子项添加到特定位置的节点?

我有一个节点有两个孩子:HTML文本和HTML元素。 Installation on server¶ 在这种情况下,HTML文本是: Installation on server 和HTML元素: anchor; 然后我创建一个这样的节点: span_node = Nokogiri::HTML::Node.new(‘span’,doc) span_node[‘class’] = ‘edit-section’ link_node = Nokogiri::HTML::Node.new(‘a’,doc) link_node[‘href’] = “/wiki/#{page_id}/#{@page.title}/edit?section=#{section_index}” link_node[‘class’] = ‘icon icon-edit’ link_node.content = ‘mylink’ span_node.add_child(link_node) 现在,要将上述节点添加到主节点,我使用以下内容: node.add_child(span_node) 这会在末尾附加span节点。 如何将span_node放在所有孩子面前?

使用Ruby和Nokogiri解析大型XML文件

我有一个大的XML文件(大约10K行)我需要定期解析这种格式: 10000 Category Name 1 Val 1 …… 10,000 more times 我想要做的是使用nokogiri解析每个节点,以计算一个类别中的项目数量。 然后,我想从total_count中减去该数字,得到一个读数为“Count of Interest_Category:n,Count of All Else:z”的输出。 这是我现在的代码: #!/usr/bin/ruby require ‘rubygems’ require ‘nokogiri’ require ‘open-uri’ icount = 0 xmlfeed = Nokogiri::XML(open(“/path/to/file/all.xml”)) all_items = xmlfeed.xpath(“//items”) all_items.each do |adv| if (adv.children.filter(“cat”).first.child.inner_text.include? “partofcatname”) icount = icount + 1 end end othercount = xmlfeed.xpath(“//totalcount”).inner_text.to_i – icount puts icount […]

如何使用Nokogiri :: XML :: Builder在元素名称中使用连字符创建XML?

我正在尝试使用Nokogiri构建XML文档。 一些元素中有连字符。 这是一个例子: require “nokogiri” builder = Nokogiri::XML::Builder.new do |xml| xml.foo_bar “hello” end puts builder.to_xml 哪个产生: hello 但是,当我尝试: builder = Nokogiri::XML::Builder.new do |xml| xml.foo-bar “hello” end 我明白了: syntax error, unexpected tSTRING_BEG, expecting kDO or ‘{‘ or ‘(‘ xml.foo-bar “hello” 现在我意识到这是因为连字符被解释为foo MINUS bar 。 我该怎么做?

使用nokogiri builder(ruby)设置标记属性并将纯文本内容添加到标记

我正在尝试使用Nokogiri构建XML,其中一些标签在标签内部具有属性和纯文本。 所以我想尝试这个: hello 使用构建器我有这个: builder = Nokogiri::XML::Builder.new { |xml| xml.Transaction(“requestName” => “OrderRequest”) do xml.Option(“b” => “hive”).text(“hello”) end } 它呈现给: hello 所以它产生hello ,我希望它是hello 我不知道该怎么做。 如果我尝试通过只提供我想要的XML来获取Nokogiri对象,它会将内部文本放在标记中设置为children=[#]我不知道如何从构建器中设置它。 如果有人在Nokogiri文档中提到了这一点,我将不胜感激。

我需要做什么才能让Hash.from_xml()工作?

我在我的代码中安装了’ActiveSupport’并且需要’active_support’,但是当我尝试使用Hash.from_xml()方法时,我得到了“No Method Error”。 我错过了什么? $ gem list 收益: \*** LOCAL GEMS \*** activesupport (3.2.6) bundler (1.1.4) i18n (0.6.0) json (1.7.3) mime-types (1.19) multi_json (1.3.6) rake (0.9.2.2) rest-client (1.6.7) rubygems-bundler (1.0.3) rvm (1.11.3.5) 和: $ ruby -v 收益: ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0] file.rb的内容是: require ‘active_support’ require ‘rest-client’ require ‘json’ token = “xxx” user = […]

将XML集合(Pivotal Tracker故事)转换为Ruby散列/对象

我有一个XML格式的故事集。 我想解析文件并将每个故事作为散列或Ruby对象返回,以便我可以进一步操作Ruby脚本中的数据。 Nokogiri是否支持此function,或者是否有更好的工具/库可供使用? XML文档具有以下结构,通过Pivotal Tracker的Web API返回: 16376 feature http://www.pivotaltracker.com/story/show/16376 2 accepted A description Receivable index listing will allow selection viewing Tony Superman Tony Superman 2009/11/04 15:49:43 WST 2009/11/10 11:06:16 WST index ui,receivables 17427 feature http://www.pivotaltracker.com/story/show/17427 3 unscheduled Validations in wizards based on direction Matthew McBoggle 2009/11/17 15:52:06 WST 17426 feature http://www.pivotaltracker.com/story/show/17426 2 unscheduled Manual payment […]

如何使用Nokogiri解析XML文件?

我和Nokogiri有些问题。 我试图解析这个XML文件: A Funfair in Bangkok Funfair in Bangkok True A small funfair near On Nut in Bangkok. 2009-08-03T00:00:00 False Funfair in Bangkok A small funfair near On Nut in Bangkok. Anthony Bouch Copyright © Anthony Bouch 2009-08-07T19:22:08 Funfair Bangkok Thailand Bumper Cars at a Funfair in Bangkok Bumper cars at a small funfair near […]

在Rails中使用XML发出SOAP请求

我想向SOAP Web服务发出请求,但我不想安装任何gem。 有没有办法使用纯XML来发出请求? 我认为这是微不足道的,但可能有一些我错过了,因为所有实现/教程都使用了gem。 我认为SOAP响应,也可以作为XML响应处理吗? 请求是这样的: POST /services/tickets/issuer.asmx HTTP/1.1 Host: demo.demo.com Content-Type: application/soap+xml; charset=utf-8 Content-Length: length string string int string unsignedByte int string