草庐IT

nokogiri

全部标签

xml - 在 Ruby 中使用多个 XSD 验证 XML

我正在生成大量XMPP节,并希望根据可用规范验证它们here在我的单元测试中。目前我正在使用Nokogiri来实现这一点,比如xml=Nokogiri::XML(xmpp_stanza)schema=Nokogiri::XML::Schema(xmpp_schema)assertschema.valid?(xml)现在这工作正常,除了它被报告为无效,因为每个模式只覆盖一个命名空间,而我的XMPP节有多个命名空间。例如:InvalidXML:Element'{http://jabber.org/protocol/pubsub}pubsub':Nomatchingglobalelement

ruby - 如何在 Ruby 中解析 DTD 文件

我试图将DTD文件转换为YAML文件,并且我尝试在libXML和Nokogiri中加载它,但DTD文件似乎不是有效的XML文件。只要我能解析DTD文件,我就可以使用任何第三方gem。我的转化尝试:wget"http://xml.evernote.com/pub/enml2.dtd"irbrequire'nokogiri'xml=Nokogiri::XML::Document.parse('enml2.dtd')xml.to_yaml=>"---!ruby/object:Nokogiri::XML::Document\ndecorators:\nnode_cache:[]\nerrors

xml - 删除 Nokogiri 节点后删除空行的更好方法

也许这是吹毛求疵,但我不得不问。我正在使用Nokogiri解析XML,删除某些标签,并用结果覆盖原始文件。使用.remove会在XML中留下空行。我目前正在使用正则表达式来摆脱空行。我应该使用一些内置的Nokogiri方法吗?这是我所拥有的:require'Nokogiri'io_path="/path/to/metadata.xml"io=File.read(io_path)document=Nokogiri::XML(io)document.xpath('//artwork_files','//tracks','//previews').remove#writetofileandr

ruby - 插入标签时的 Nokogiri 和 XML 格式化

我想使用Nokogiri将节点插入到XML文档中。Nokogiri使用Nokogiri::XML::Builder类来插入或创建新的XML。如果我使用new方法创建XML,我能够创建漂亮的格式化XML:builder=Nokogiri::XML::Builder.newdo|xml|xml.product{xml.test"hi"}endputsbuilder输出如下:hi太好了,但是我想做的是将上面的XML添加到现有文档,而不是创建新文档。根据Nokogiri文档,这可以通过使用Builder的with方法来完成,如下所示:builder=Nokogiri::XML::Builder

ruby - 如何遍历 Nokogiri XML DocumentFragment 中特定名称的子节点?

在名为“string”的字符串中给定此XML:12345ABXYZABCAC这行代码:bgdoc=Nokogiri::XML::DocumentFragment.parse(xstring.to_xml)我想遍历所有名为“Part”的节点。我尝试了以下方法:bgdoc.xpath("//Part").eachdo|node|和:bgdoc.children.eachdo|node|nextunlessnode.name=="Part"但这没有用。 最佳答案 问题是将XML解析为片段会返回部分XML文档,即DocumentFragme

ruby - 将 XML 元素添加到 Nokogiri::XML::Builder 文档

如何添加Nokogiri::XML::Element使用Nokogiri::XML::Buider创建的XML文档?我目前的解决方案是序列化元素并使用让Builder重新解释它的方法。orig_doc=Nokogiri::XML('test')node=orig_doc.at('/*/*[1]')putsNokogiri::XML::Builder.newdo|doc|doc.another{#FIXME:thisistheround-tripIwouldliketoavoidxml_text=node.to_xml(:skip_instruct=>true).to_sdoc#test

ruby - 如何使用 Nokogiri 将我的更改保存在 XML 文件中

我有以下简单的XML文件。我想使用Nokogiri将内容添加到用户映射。这是我的代码:f=File.open("exam.xml")doc=Nokogiri::XML(f)putsdoc.to_smap=doc.at_css"user-mapping"map.content="Gholam"putsmap.to_sdoc.to_xmlf.closeputs的输出是:Gholam但是当代码结束时,实际的XML文件没有任何变化。任何人都可以向我解释如何将我的更改保存在XML文件中吗? 最佳答案 将文件读入内存中的XML文档,根据需要修改

ruby - 使用 Nokogiri 获取嵌套在 div 元素中的 div

对于以下HTML,我想使用Nokogiri解析它并获得以下结果。event_name="folkconcert2"event_link="http://www.douban.com/event/12761580/"event_date="20th,11,2010"我知道doc.xpath('//div[@class="nofclearfix"]')可以获取每个div元素,但我应该如何继续获取每个属性,例如event_name,尤其是date?HTMLfolkconcert2Date:25th,11,2010folkconcertDate:10th,11,2010

ruby - 如何使用 Nokogiri 将嵌套哈希转换为 XML

我有很多层次的嵌套散列,例如:{:foo=>'bar',:foo1=>{:foo2=>'bar2',:foo3=>'bar3',:foo4=>{:foo5=>'bar5'}}}如何将它们转换成这样的XML?:barbar2bar3bar5我尝试了xml.send方法,但它将上面的嵌套哈希转换为:bar 最佳答案 这个怎么样?classHash defto_xml  mapdo|k,v|   text=Hash===v?v.to_xml:v   "%s"%[k,text,k]  end.join endendh.to_xml#=>"b

ruby - 用于深层嵌套元素的 XPath?

我正在使用Nokogiri。假设我有一个深度嵌套的路径://h1/h2/h3/h4/h5我想我可以使用以下路径://h1/*/*/*/h5有什么方法可以避免使用多个星号?像//h1/.../h5这样的东西?我不想一直计算嵌套的层次。 最佳答案 对于从h1派生的所有h5元素,使用://h1//h5或者您可能喜欢更简单的css样式:h1h5 关于ruby-用于深层嵌套元素的XPath?,我们在StackOverflow上找到一个类似的问题: https://sta