我正在编写一个 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/