Tag: xml

用Nokogiri解析简单的XML

我有以下XML: Title 1 http://www.example.com/url-1 Title 2 http://www.example.com/url-2 Title 3 http://www.example.com/url-3 而且,我想将其转换为HTML列表: Title 1 Title 2 Title 3 目前我有这个: 控制器: require ‘nokogiri’ doc = Nokogiri::XML(…) @links = doc.xpath(‘//links/item’).map do |i| {‘title’ => i.xpath(‘//title’), ‘url’ => i.xpath(‘//url’)} end 模板: <a href="https://stackoverflow.com/questions/3938810/parsing-simple-xml-with-nokogiri/”> 结果HTML: Title 1Title 2Title 3 Title 1Title 2Title 3 Title 1Title 2Title 3 我究竟做错了什么? 有更好的方法吗?

如何美化rails应用程序中的xml代码

有没有一种简单的方法可以将未格式化的xml字符串打印到rails应用程序中的ruby屏幕上? 像xml美化的东西?

Ruby:attr_accessor生成的方法 – 如何迭代它们(在to_s中 – 自定义格式)?

我需要一个具有半自动’to_s’方法的Class(实际上生成XML)。 我想遍历我的’attr_accessor’行中设置的所有自动方法: class MyClass attr_accessor :id,:a,:b,:c end c=MyClass.new 到目前为止,我正在做一个基本的: c.methods – Object.methods => [“b”, “b=”, “c”, “c=”, “id=”, “a”, “a=”] 我面临一些挑战: ‘id’可能会引起轻微的头痛 – 因为Object似乎已经有’id’。 上面的’c.methods’调用返回字符串 – 我没有得到任何其他元数据? (在Java’方法’中是一个对象,我可以在其中进行进一步的reflection)。 我有一对多的关系我必须处理(’c’是其他对象类型的数组类型)。 这就是我想要做的:我想设计一个简单的Object,它有一个’to_s’,它将构建一个XML片段:例如。 1 Title Stuff …. 然后从这个简单的对象inheritance我的数据类:这样(希望)我得到一个mechansim来构建一个完整的XML文档。 我相信我也在这里重新发明轮子……所以其他久经考验的方法也值得欢迎。

XPath以查找所有后续兄弟姐妹,直到特定类型的下一个兄弟

鉴于此XML / HTML: Label1Value1 Label2Value2 Label3Value3aValue3b Label4Value4 我想找到所有 然后,为每个 找到以下 直到下一个 。 使用Ruby的Nokogiri我能够像这样完成: dl.xpath(‘dt’).each do |dt| ct = dt.xpath(‘count(following-sibling::dt)’) dds = dt.xpath(“following-sibling::dd[count(following-sibling::dt)=#{ct}]”) puts “#{dt.text}: #{dds.map(&:text).join(‘, ‘)}” end #=> Label1: Value1 #=> Label2: Value2 #=> Label3: Value3a, Value3b #=> Label4: Value4 但是,你可以看到我在Ruby中创建一个变量,然后使用它编写一个XPath。 如何编写一个相同的XPath表达式? 我猜到: following-sibling::dd[count(following-sibling::dt)=count(self/following-sibling::dt)] 但显然我不明白那里的self意味着什么。 这个问题类似于XPath:选择所有以下兄弟,直到另一个兄弟,除了’stop’节点没有唯一标识符。 这个问题与xpath几乎相同,除了我要求的XPath-only解决方案之外, 找到所有以下兄弟相邻节点直到另一个类型 。

使用Savon / Ruby复制XML请求

我试图避免使用Nokogiri/Builder来构建我的XML,并希望在Ruby 2.0.0中使用Savon gem。 我有以下要求复制的请求: 1 到目前为止我有这个: def soap_client soap_client = Savon.client( wsdl: “http://10.10.10.10/ListApi.svc?wsdl” headers: {“Authorization” => “Basic”}, basic_auth: [‘username’, ‘password’], env_namespace: :s, ssl_verify_mode: :none, log: true, :pretty_print_xml => true ) end 然后soap_client.call :get_list, message: {‘id’ => 1}返回: 1 我无法弄清楚如何完全复制第一个请求。 GetList上的tns: namespace是错误的,我也无法复制<listRequest xmlns:a = piece。 有关如何在萨翁内做到这一点的任何想法?

nokogiri可以在保存xml时使用单引号属性吗?

Nokogiri使用双引号保存XML属性,即使它读取的DOM具有单引号。 这当然是完全合法的,但它引入了令人烦恼的文件内容更改,即使DOM没有改变,这使得像diff和git这样的工具更难以弄清楚发生了什么。 我可以强制它使用单引号(或者甚至更好,如果没有修改,保留原始中的任何引用样式)? REXML用于设置单/双引号: doc.context[:attribute_quote] = :quote 我找不到与nokogiri类似的东西。 是否可以使用单引号保存文档?

用nokogiri更新节点打开xml文件并保存

我试图弄清楚如何打开一个xml文件,按id搜索,替换节点中的值,然后重新保存文档。 我的xml 1@1.com false 2@2.com false 3@3.com false 4@4.com false 5@5.com false 我的代码打开并找到一个节点 xml_content = File.read(“/home/mike/app/users.xml”) doc = Nokogiri::XML(xml_content) node_update = doc.search(“//user[@id=’1370028588345′] //sent”) node_update.inner_html ##returns value of “sent” 我卡住的部分实际上是更新节点。 node_update.inner_html = “true”在inner_html上返回方法错误。 之后保存更新的文件。

Rubyunit testing:这是一个有效(格式良好)的XML Doc吗?

我正在创建一个XML文档:我想至少进行unit testing,以确保它的格式良好。 到目前为止,我只能通过使用REXML库中的’hasElements’来估算它。 有没有更好的办法 ? 最好使用内置库(我的意思是随标准Ruby 1.8.x发行版一起提供的库)。 require “test/unit” require ‘rexml/document’ require ‘test/unit/ui/console/testrunner’ include REXML class TestBasic < Test::Unit::TestCase def test_createXML my_xml=…create doc here… doc = Document.new(my_xml); assert(doc.has_elements?); end end Test::Unit::UI::Console::TestRunner.run(TestBasic);

Nokogiri可以搜索“?xml-stylesheet”标签吗?

我需要解析XML样式表: 使用Nokogiri我试过: doc.search(“?xml-stylesheet”).first[‘href’] 但我得到错误: `on_error’: unexpected ‘?’ after ” (Nokogiri::CSS::SyntaxError)

如何用Nokogiri让空标签自动关闭?

我在ERB中创建了一个XML模板。 我在导出过程中用数据库中的数据填充它。 在某些情况下,有一个空值,在这种情况下,一个元素可能是空的,如下所示: 在这种情况下,接收导出的客户端希望将其转换为自闭合标记: 我正试图看看如何让Nokogiri这样做,但我还没有看到它。 有人知道如何使Nokogiri自动关闭空XML标签吗? 更新 正则表达式足以完成我上面指定的操作,但客户端现在还希望其子项全部为空的标记可以自动关闭。 所以这: ……也应该 我认为这需要使用Nokogiri。