如何使用 Nokogiri 访问属性

2024-04-04

我有一个访问某些属性的值的简单任务。这是一个简单的脚本,使用Nokogiri::XML::Builder创建一个简单的 XML 文档。

require 'nokogiri'

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.Placement(:messageId => "392847-039820-938777", :system => "MOD", :version => "2.0") {
    xml.objects {
        xml.object(:myattribute => "99", :anotherattrib => "333")
        xml.nextobject_ '9387toot'
        xml.Entertainment "Last Man Standing"
    }
  }
end

puts builder.to_xml
puts builder.root.attributes["messageId"]

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<Placement messageId="392847-039820-938777" version="2.0" system="MOD">
  <objects>
    <object anotherattrib="333" myattribute="99"/>
    <nextobject>9387toot</nextobject>
    <Entertainment>Last Man Standing</Entertainment>
  </objects>
</Placement>
C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/document.rb:178:in `add_child': Document already has a root node (RuntimeError)
    from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/node.rb:455:in `parent='
    from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:358:in `insert'
    from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:350:in `method_missing'
    from C:/Documents and Settings/etrojan/workspace/Lads/tryXPATH2.rb:15

生成的 XML 看起来不错。但是,我尝试访问属性会导致生成错误:

Document already has a root node

我不明白为什么puts会导致这个错误。


Using Nokogiri::XML::阅读器 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Reader.html适用于您的示例,但可能不是您正在寻找的完整答案(请注意,有no attributes构建器的方法 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Builder.html).

reader = Nokogiri::XML::Reader(builder.to_xml)
reader.read #Moves to next node in document
reader.attribute("messageId")

请注意,如果您发出reader.read再次然后尝试reader.attribute("messageId")结果将是nil因为当前节点不会有这个属性。

你可能想做的是使用Nokogiri::XML::文档 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Document.html如果您想按属性搜索 XML 文档。

doc = Nokogiri::XML(builder.to_xml)
elems = doc.xpath("//*[@messageId]") #get all elements with an attribute of 'messageId'
elems[0].attr('messageId') #gets value of attribute of first elem 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Nokogiri 访问属性 的相关文章

随机推荐

  • 解决方案资源管理器中的 Visual Studio 心形叠加。这是什么意思?

    在解决方案资源管理器中 您有时会在类定义节点中看到心形覆盖 它意味着什么 我相信您指的是信号图标 当类型 成员是内部 C 或朋友 VB NET 时 心形会显示在类型 成员上 图标的含义是记录在 Microsoft 文档中 https lea
  • Openpyxl如何通过索引从工作表中获取行

    使用 Openpyxl 和 python3 5 我尝试使用下标从 Excel 工作表中获取第一行 但出现错误 after getting filename after loading worksheet to get the first r
  • C# NotifyIcon ShowBalloonTip 超时

    在我的 C 2 0 框架 应用程序中 我使用通知图标控件 我想从此控件中显示气球提示 但是 showBalloonTip 事件我限制为超时 我想永远显示这个气球 我尝试使用一个计时器来一次又一次地显示气球 但在 vista 中 气球有淡入淡
  • mb_convert_case 未定义函数(Symfony2 FOS/UserBundle)

    在我的 Symfony2 应用程序上 我收到错误 致命错误 在第 18 行 Applications MAMP htdocs application vendor bundles FOS UserBundle Util Canonicali
  • 对JPanel函数的关注:paintComponent()

    你好 我是java编程新手 我需要有人向我解释这些代码行 public class drawpanel extends JPanel public void paintComponent Graphics g super paintComp
  • zend 模型架构

    假设我的数据库中有两个表 项目和用户 我创建了两个扩展 Zend Db Table Abstract 的模型 Model DbTable Users and Model DbTable Projects 现在 创建一个实例是一个好的模式吗
  • 如何向 WordPress 添加简单的 jQuery 脚本?

    我阅读了 Codex 和一些关于在 WordPress 中使用 jQuery 的博客文章 这非常令人沮丧 我已经加载了 jQueryfunctions php文件 但所有的指南都很糟糕 因为他们假设你已经有大量的 WordPress 经验
  • 如何在 gradle 中获取当前选择的构建变体?

    我正在使用带有 gradle 2 2 的 Android Studio RC 我的构建变体部分中有一些变体 我可以选择我想要构建的变体 例如 为匈牙利或德国构建的一个 我在 gradle 脚本中启动了一些任务 例如根据风味 变体更改名称 但
  • Backbone.js 中的分页

    我知道有一个组件可以实现此目的 但根据我所看到的 您必须创建一个扩展组件的新集合 还有另一种方法可以在主干中进行分页吗 我所需要的只是一个上一个和下一个按钮 将每页的项目限制为 12 个 我一直在 javascript 上创建它 对于生产环
  • 尝试在 slack 上为 laravel-botman 启用事件订阅时,如何响应正确的质询值

    这不是我之前的问题的重复here https stackoverflow com questions 52850571 connecting slack to botman in laravel on localhost 我正在使用botm
  • 未找到图像或类型未知 Dompdf 0.8.1 和 CodeIgniter

    我想从生成的图像将图像加载到 PDF 我已经设置了isRemoteEnabled 为 true和 生成的 QRCode 工作正常 这是我的代码 this gt load gt library array pdf ciqrcode data
  • 如何解码包含无效字节的字节对象,Python3

    在python2中 我可以整天生成以字符串格式表示的这些十六进制字节 x00 xaa xff gt gt gt 00 decode hex aa decode hex ff decode hex gt gt gt x00 xaa xff 同
  • 为什么 2 和 4 在 b 之前打印?

    function first return new Promise resolve gt console log 2 resolve 3 console log 4 async function f console log 1 let r
  • 如何使用用户提供的 Hadoop 正确配置 Spark 2.4

    我想使用 Spark 2 4 5 当前稳定的 Spark 版本 和 Hadoop 2 10 2 x 系列中当前稳定的 Hadoop 版本 此外 我需要访问 HDFS Hive S3 和 Kafka http spark apache org
  • 引导多个 angular2 模块时出错

    当我们更新应用程序的某些部分时 我们开始将当前的应用程序转换为 Angular2 所以我们正在尝试用 Angular2 模块 组件替换应用程序的某些部分 第一部分是创建两个不同的搜索组件并将它们放置在 asp net mvc 中的不同视图中
  • grails 更改 gsp 视图中的日期格式

    当我尝试在 gsp 视图中使用日期格式标记来更改日期格式时 但它不起作用 这是我的代码 class MyDate Date date 我的日期控制器 def unixSeconds params date replaceAll as lon
  • 我可以使用Treetop来解析IO吗?

    我有一个文件想要用 Treetop 解析 如果我想解析整个事情 我会使用 rule document category listing end 我真的不想立即将整个文件读入内存 我知道我可以设置解析器来解析一个category listin
  • MySQL 中的行版本控制

    我想在表中包含一个整数版本字段 在每次更新行时自动递增 在 MySQL 中可以做到这一点吗 请注意 我不是在谈论TIMESTAMP 这是不可靠的 因为同一秒内可能会发生两个并发更新 是的 更一般的问题称为缓慢改变尺寸 http en wik
  • 在强类型 MVC 视图用户控件中使用值类型

    我有一个具有以下基本结构的 MVC 用户控件 当我使用它时 它给出了这个错误消息 编译器错误消息 CS0452 类型 decimal 必须是引用 输入以便将其用作参数 泛型类型或方法中的 TModel System Web Mvc View
  • 如何使用 Nokogiri 访问属性

    我有一个访问某些属性的值的简单任务 这是一个简单的脚本 使用Nokogiri XML Builder创建一个简单的 XML 文档 require nokogiri builder Nokogiri XML Builder new encod