css - 如何通过 CSS 选择器定位标签,引用兄弟标签的内容?

标签 css ruby xml nokogiri siblings

我正在编写一个 Ruby 脚本,它将解析和操作一些 XML 文件。我正在使用 Nokogiri 进行 XML 处理。

我遇到的问题是有几个像这样的结构:

<USER_ELEMENT>
  <NAME>ATTRIBUTE01</NAME>
  <VALUE>XXX</VALUE>
</USER_ELEMENT>

我需要设置 <VALUE>与特定 <VALUE>ATTRIBUEnn</VALUE> 相同的标签.我目前的做法是使用

xml.css('USER_ELEMENT').find { |node| node.at_css('NAME').text == 'ATTRIBUTEnn'}.at_css('VALUE').content = 'NEW_VALUE'

但它看起来很丑。

我想知道处理这种情况哪种方式更简洁?

最佳答案

使用 XPath:

attnn = "ATTRIBUTE01"
xml.at_xpath("//USER_ELEMENT[NAME='#{attnn}']/VALUE").content = "Yay"
puts xml
#=> <USER_ELEMENT>
#=>   <NAME>ATTRIBUTE01</NAME>
#=>   <VALUE>Yay</VALUE>
#=> </USER_ELEMENT>

在英语中,XPath 表示:

  • //USER_ELEMENT - 在文档中的任意位置查找具有此名称的元素
  • […] - 但前提是……
    • NAME="ATTRIBUTE01" - ...您可以找到一个包含此文本的子 NAME 元素
  • /VALUE - 现在找到这些
  • 的子 VALUE 元素

关于css - 如何通过 CSS 选择器定位标签,引用兄弟标签的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749651/

相关文章:

javascript - 使用 jQuery 切换 div 的旋转

ruby - 为什么 String.tap 不返回修改后的字符串?

ruby-on-rails - 在 Controller 中扩展一个 Action

java - 尝试将 XML 转换为允许用户输入的 JTable

javascript - 从javascript中的单独文件夹中获取图像

javascript - 选中/取消选中复选框时如何隐藏/显示内容?

css - 在 Woocommerce Checkout 中将 "Continue To Payment"按钮移至顶部

ruby-on-rails - 通过先写入 redis 来加速 web 服务,然后写入磁盘?

java - 为什么 XML 中的 ImageView 和 Java 中的测量不同?

java - 单击 ListView 项内元素的事件以切换 ListItem 的内容