【问题标题】:How to iterate through nested xml elements using Nokogiri如何使用 Nokogiri 遍历嵌套的 xml 元素
【发布时间】:2018-09-13 15:58:22
【问题描述】:

我有一个 xml 文件,其中包含以下嵌套元素:

<SourceDetails>
    <Origin>Origin</Origin>
    <Identifier>Identifier</Identifier>
    <Version>0</Version>
</SourceDetails>

我已经使用 at_xpath 函数从存储在变量中的 xml 文件中提取上述 xml sn-p。是否可以使用 Ruby Nokogiri 遍历此变量并存储嵌套 xml 元素的内容?如果是这样,这是如何完成的?

我想将 SourceDetails 中的每个元素附加到另一个变量,后跟一个正斜杠。对于上面的示例,我想获取格式为 Origin/Identifier/0

的内容

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    这是一个又快又脏的。由于我不确定您如何存储包含 XML 的变量,因此为了确保我得到了实际的 XML 数据,我实际上是从文件中读取 XML 数据,这给了我们:

    require 'nokogiri'
    
    xml = File.open('source_of_xml.xml') { |f| Nokogiri::XML(f) }
    
    values = []
    xml.xpath('SourceDetails').each do |elem|
       values << elem.text.gsub(/\n/, "").split
    end
    
    p values.first.join("/") #assing this to variable you want. 
    
    # => "Origin/Identifier/0"
    

    这对您有帮助或指导吗?

    【讨论】:

    • 变量没有xml数据,只包含普通文本。本质上它是一个字符串变量,我想将嵌套 xml 中的值添加到字符串的末尾。您是否知道如何直接从 xmls 标记的内容获取值到字符串变量?如果你不这样做也没关系,你的回答肯定有帮助!
    • @NadiyaNelson 您能否展示一下您正在使用的变量的外观?也许更新你的问题。因为现在我只是假设 XML 数据是存储在变量中的数据。如果你能发布这个变量的样子就好了。
    • 嗨@Emanuel,我刚刚解决了,非常感谢您的帮助,非常感谢
    【解决方案2】:

    有一个简单的方法

    require "nokogiri"
    xmlFileData = Nokogiri::XML(File.open('./xmlFile.xml'))
    dataArr = xmlFileData.at_xpath("//SourceDetails").text.split("\n")
    dataArr.delete_at(0)
    puts dataArr.join("/").gsub(/(\s+)/, '')
    

    【讨论】:

    • 非常感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2020-04-19
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2011-09-06
    • 2016-06-26
    相关资源
    最近更新 更多