J'essaie de lire du code XML récupéré à partir d'un service Web et de valider un attribut spécifique dans le fichier XML.Comment valider des attributs spécifiques en XML en utilisant REXML de Ruby?
C'est le XML jusqu'à la balise que je dois valider:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<QueryResponse xmlns="http://tempuri.org/">
<QueryResult xmlns:a="http://schemas.datacontract.org/2004/07/Entity"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Navigation i:nil="true" />
<a:SearchResult>
<a:EntityList>
<a:BaseEntity i:type="a:Product">
<a:ExtractDateTime>1290398428</a:ExtractDateTime>
<a:ExtractDateTimeFormatted>11/22/2010
04:00:28</a:ExtractDateTimeFormatted>
Voici le code que j'ai jusqu'ici en utilisant REXML en Ruby:
require 'xmlsimple'
require 'rexml/document'
require 'rexml/streamlistener'
include REXML
class Listener
include StreamListener
xmlfile = File.new("rbxml_CS_Query.xml")
xmldoc = Document.new(xmlfile)
# Now get the root element
root = xmldoc.root
puts root.attributes["a:EntityList"]
# This will output the date/time of the query response
xmldoc.elements.each("a:BaseEntity"){
|e| puts e.attributes["a:ExtractDateTimeFormatted"]
}
end
Je dois valider ExtractDateTimeFormatted est là et a une valeur valide pour cet attribut. Toute aide est grandement appréciée. :)
Lecture à partir d'un fichier XML local.
File.open('temp.xml', 'w') { |f|
f.puts request
f.close
}
xml = File.read('temp.xml')
doc = Nokogiri::XML::Reader(xml)
extract_date_time_formatted = doc.at(
'//a:ExtractDateTimeFormatted',
'a' => 'http://schemas.datacontract.org/2004/07/Entity'
).inner_text
show = DateTime.strptime(extract_date_time_formatted, '%m/%d/%Y')
puts show
Quand je lance ce code je reçois une erreur: « méthode non définie « à » pour # sur la ligne 21
Cette est génial mais j'ai un problème avec ça. Le XML est dynamique car chaque fois que je tape sur le service web, je vais avoir un nouvel horodatage. J'ai besoin de Nokogiri pour lire le xml de la mémoire. J'ai donc pris ma demande Savon et j'ai fait ceci: xml = request.to_s() – r3nrut
Le problème que j'obtiens maintenant est: ContentService_Query.rb: 69: dans ' ': méthode non définie' at' f ou # (NoMethodError) –
r3nrut
Nokogiri s'en fout si le XML est statique ou dynamique, tant que le nom du tag reste le même qu'il sera toujours trouvé. –