[英]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.