簡體   English   中英

如何使用帶有REXML的Ruby獲取XML標簽的屬性?

[英]How to get the attributes of an XML tag using Ruby with REXML?

我只想將REXML與Ruby一起以特定方式輸出xml文件。 xml文件如下所示:

<desc>
     <id>2408</id>
     <who name="Joe Silva">joe@silva.com</who>
     <when>Today</when>
     <thetext>Hello World</thetext>
</desc>
<desc>
     <id>2409</id>
     <who name="Joe Silva2">joe2@silva.com</who>
     <when>Future</when>
     <thetext>Hello World Again</thetext>
</desc>

到目前為止,這是我使用的代碼:

document.elements.each("//desc") {
    |e| e.elements.each 
        |i| puts "#{i.name} : #{i.text}"
    puts "\n"
}

這給了我以下輸出:

commentid : 2408
who : joe@silva.com
bug_when : Today
thetext : Hello World

commentid : 2409
who : joe2@silva.com
bug_when : Future
thetext : Hello World Again

我可以訪問每個標簽的文本,但不能訪問它們的屬性。 如何訪問屬性並獲得帶有name屬性的輸出?

所以我想要的輸出是:

commentid : 2408
name : Joe Silva
who : joe@silva.com
bug_when : Today
thetext : Hello World

讓我知道是否需要進一步說明。

我不會使用REXML,而是會使用Nokogiri 使用它,我會寫類似:

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<xml>
<desc>
     <id>2408</id>
     <who name="Joe Silva">joe@silva.com</who>
     <when>Today</when>
     <thetext>Hello World</thetext>
</desc>
<desc>
     <id>2409</id>
     <who name="Joe Silva2">joe2@silva.com</who>
     <when>Future</when>
     <thetext>Hello World Again</thetext>
</desc>
</xml>
EOT

data = doc.search('desc').map{ |desc|
  desc.children.reject(&:text?).map { |desc_child|
    [desc_child.name, desc_child.text]
  }.to_h
}

data
# => [{"id"=>"2408",
#      "who"=>"joe@silva.com",
#      "when"=>"Today",
#      "thetext"=>"Hello World"},
#     {"id"=>"2409",
#      "who"=>"joe2@silva.com",
#      "when"=>"Future",
#      "thetext"=>"Hello World Again"}]

這提供了一個包含節點名稱及其文本的哈希數組。

剩下的方法是如何更改用作鍵的節點的名稱並打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM