Aus der XML-Datei, die von der Meteorological Agency mit Ruby rexml bereitgestellt wurde Ich versuche, die Informationen des Alarms zu erhalten und je nach Situation ein Urteil zu fällen.
Ruby 2.6.3 require 'rexml/document'
Analysieren Sie die folgenden Dateien und fügen Sie sie in das Dokument ein.
<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx_add="http://xml.kishou.go.jp/jmaxml1/addition1/">
--- Auslassen zwischen ---
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
--- Auslassen zwischen ---
<Headline>
<Text>Achten Sie in der Präfektur Osaka auf Erdrutsche, schwere Stürme wie Tornados und Blitzeinschläge.</Text>
<Information type="Meteorologische Warnung / Warnung (Präfektur-Vorhersagegebiet usw.)">
<Item>
<Kind>
<Name>Starke Regenwarnung</Name>
<Code>10</Code>
</Kind>
<Kind>
<Name>Donnerwarnung</Name>
<Code>14</Code>
</Kind>
<Areas codeType="Meteorologische Informationen / Präfekturprognosezone, Unterteilungsgebiet usw.">
<Area>
<Name>Präfektur Osaka</Name>
<Code>270000</Code>
</Area>
</Areas>
</Item>
</Information>
Weniger als,<Information>gefolgt von
Ich möchte jede Anweisung mit dem Element
item = doc.elements['//Item']
item.each do |kind|
puts kind
end
In diesem Fall wurde jede Anweisung an alle untergeordneten Elemente gesendet, was ein Problem darstellte.
--Verwenden Sie REXML :: XPath.match (beantwortet)
require 'rexml/document'
doc = REXML::Document.new(File.read('index.xml'))
kinds = REXML::XPath.match(doc, '/Item/Kind')
kinds.each do |kind|
puts kind.to_s
end
--Verwenden Sie get_elements (selbstlösend)
doc=REXML::Document.new(open(osaka.xml))
doc.get_elements('//Information/Item/Kind') do |kind|
puts kind
end
Die Ergebnisse waren für beide gleich, aber was ist der Unterschied? Finden Sie heraus, ob beide gleich sind.
https://docs.ruby-lang.org/ja/latest/method/REXML=3a=3aElement/i/get_elements.html
Recommended Posts