À partir du fichier xml fourni par l'Agence météorologique avec Ruby rexml J'essaie d'obtenir les informations de l'alarme et de porter un jugement en fonction de la situation.
Ruby 2.6.3 require 'rexml/document'
Analysez les fichiers suivants et placez-les dans le document.
<?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/">
--- Omettre entre ---
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
--- Omettre entre ---
<Headline>
<Text>Dans la préfecture d'Osaka, faites attention aux glissements de terrain, aux vents violents tels que les tornades et aux coups de foudre.</Text>
<Information type="Avertissement / alerte météorologique (zone de prévision préfectorale, etc.)">
<Item>
<Kind>
<Name>Avertissement de fortes pluies</Name>
<Code>10</Code>
</Kind>
<Kind>
<Name>Avertissement de tonnerre</Name>
<Code>14</Code>
</Kind>
<Areas codeType="Informations météorologiques / Zone de prévision préfectorale, zone de subdivision, etc.">
<Area>
<Name>Préfecture d'Osaka</Name>
<Code>270000</Code>
</Area>
</Areas>
</Item>
</Information>
Moins que,<Information>Suivi par
Je veux tourner chaque instruction avec l'élément
item = doc.elements['//Item']
item.each do |kind|
puts kind
end
Dans ce cas, chaque instruction était envoyée à tous les éléments enfants, ce qui posait problème.
--Utiliser REXML :: XPath.match (répondu)
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
--Utilisez get_elements (auto-résolution)
doc=REXML::Document.new(open(osaka.xml))
doc.get_elements('//Information/Item/Kind') do |kind|
puts kind
end
Les résultats étaient les mêmes pour les deux, mais quelle est la différence? Découvrez si les deux sont identiques.
https://docs.ruby-lang.org/ja/latest/method/REXML=3a=3aElement/i/get_elements.html
Recommended Posts