Tag: xml

如何在Ruby中测试XML相等性?

显然,我需要(a)将两个字符串转换为规范XML或(b)比较它们的解析树。 以下不起作用,因为返回的文档对象没有合理的==定义。 Nokogiri.XML(doc_a) == Nokogiri.XML(doc_b) 下面也没有,因为Nokogiri的to_xml留下了一些内部空白: Nokogiri.XML(doc_a).to_xml == Nokogiri.XML(doc_b).to_xml 这是一个合理的近似平等(并且适用于大多数情况),但它并不完全正确: Nokogiri.XML(doc_a).to_xml.squeeze(‘ ‘) == Nokogiri.XML(doc_b).to_xml.squeeze(‘ ‘) 我已经在使用Nokogiri了,所以我更愿意坚持下去,但我会使用任何图书馆的作品。

使用Nokogiri构建器创建带有命名空间根元素的XML文档

我正在为需要命名空间的XML数据格式实现导出器。 我正在使用Nokogiri XML Builder(版本1.4.0)来执行此操作。 但是,我不能让Nokogiri创建一个带有命名空间的根节点。 这有效: Nokogiri::XML::Builder.new { |xml| xml.root(‘xmlns:foobar’ => ‘my-ns-url’) }.to_xml 就像这样: Nokogiri::XML::Builder.new do |xml| xml.root(‘xmlns:foobar’ => ‘my-ns-url’) { xml[‘foobar’].child } end.to_xml 但是,我需要像这样的东西,这不起作用: Nokogiri::XML::Builder.new { |xml| xml[‘foobar’].root(‘xmlns:foobar’ => ‘my-ns-url’) }.to_xml NoMethodError: undefined method `namespace_definitions’ for # 显然,在使用之前必须定义命名空间,因此无法将其添加到根节点。 我在Nokogiri邮件列表上发现了一个关于此的问题 ,但没有回复。 有人有解决方案吗?

如何使用Net :: HTTP :: Post将XML发布到RESTFUL Web服务?

我无法让这个工作,所以任何帮助将不胜感激! 基本上,request.body包含Web服务的有效XML,如下所示: Test Name 1 Some data for Unit testing …但该服务返回空XML。 请注意,返回id字段表明它实际上确实命中了数据库,但名称和描述字段为nil: 1 我已经使用Poster手动测试了RESTFUL服务,它运行正常。 这是代码: url = URI.parse(‘http://localhost:3000/someservice/’) request = Net::HTTP::Post.new(url.path) request.body = “Test Name 1Some data for Unit testing” response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} #Note this test PASSES! assert_equal ‘201 Created’, response.get_fields(‘Status’)[0] 有没有人有任何线索为什么XMLpost中的数据不会持久存在?

使用Savon 2发送原始XML

我正在尝试使用Savon将请求发送到Web服务。 我正在使用的服务需要嵌套的命名空间,我还没有想出如何在请求中提供它们。 我试图手工制作请求(实际上是用nokogiri)并发送生成的xml: client.call(:some_op, :message=>{:”op”=>””}) 但savon逃脱了字符串并发送<elem/> 如何在不转义的情况下发送原始xml?

ruby中的xml差异?

将两个xml文档与ruby合并的最佳/最快方法是什么? 我有两个xml文件,一个是格式化的,因此它具有视觉吸引力,一个不是(并且它有删除的注释和空格),它对整个节点进行了一些更改,并且经常更改。 因此,我试图找出一个简单而有效的解决方案来检查更改的内容(它们可能并非都有ID),并将旧文档与格式化文档合并。

如何让Nokogiri了解我的命名空间?

我有以下XML文档: @NOT_USED@ abcdefg 我想从中获取SessionIndex (即’abcdefg’)的内容。 我试过这个: XPATH_QUERY = “LogoutRequest[@ID][@Version=’2.0′][IssueInstant]/SessionIndex” SAML_XMLNS = ‘urn:oasis:names:tc:SAML:2.0:assertion’ SAMLP_XMLNS = ‘urn:oasis:names:tc:SAML:2.0:protocol’ require ‘nokogiri’ doc = Nokogiri::XML(xml) doc.xpath(XPATH_QUERY, ‘saml’ => SAML_XMLNS, ‘samlp’ => SAMLP_XMLNS) 但是我收到以下错误: Nokogiri::XML::SyntaxError: Namespace prefix samlp on LogoutRequest is not defined Nokogiri::XML::SyntaxError: Namespace prefix saml on NameID is not defined Nokogiri::XML::SyntaxError: Namespace prefix samlp on SessionIndex is not defined […]

为什么Ruby Builder :: XmlMarkup将inspect标签添加到xml?

我正在尝试使用Builder :: XMLMarkup来构建一些xml,并且它不断向我的xml添加一个空元素。 为什么会这样做,如何阻止它? xml = Builder::XmlMarkup.new =>

在Ruby中区分两个XML文档?

使用?查看两个xml文件之间差异的最简单方法是什么? 我查看了Hpricot和Nokogiri,但找不到任何好的比较方法。 我也研究了像diffxml这样的unix工具,但宁愿在ruby中使用一些东西。 有人有任何想法吗?

使用Nokogiri的XML Builder添加命名空间

我一直在破坏我的头几个小时,但我似乎无法确定如何在使用Nokogiri XML Builder类构建XML结构时添加XMLNS名称空间。 例如,考虑下面的XML示例:我可以在GetQuote标记之间创建所有内容,但创建“p:ACMRequest”仍然是一个谜。 我遇到了这个参考资料, https://gist.github.com/428455/7a15f84cc08c05b73fcec2af49947d458ae3b96a ,这对我来说仍然没有意义。 即使参考XML文档,http://www.w3.org/TR/xml-names/,也没有多大意义。 … … … … … …

从xml名称值转换为简单哈希

我不知道这是什么名字,这使我的搜索变得复杂。 我的数据文件OX.session.xml是(旧的?)forms FE5E27A056944FBFBEF047F2B99E0BF6 8228-5500 967454 那个XML数据格式到底是什么? 无论如何,我想要的是在我的Ruby代码中最终得到一个哈希,如下所示: CAppLogin = { :SessionID => “FE5E27A056944FBFBEF047F2B99E0BF6”, :AccountNum => “8228-5500”, etc. } # Doesn’t have to be called CAppLogin as in the file, may be fixed 什么可能是最短的,最内置的Ruby方式来自动化哈希读取,我可以更新SessionID值并将其轻松存储回文件以供以后的程序运行? 我玩过YAML,REXML但是还不想打印我的(坏)示例试验。