Ich versuche, etwas XML zu lesen, das ich von einem Webdienst abgerufen habe, und validiere ein bestimmtes Attribut innerhalb des XML.Wie validiere ich bestimmte Attribute in XML mit REXML von Ruby?
Dies ist der XML mit dem Tag, die ich bestätigen müssen:
<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>
Hier ist der Code ist habe ich bisher REXML in Ruby mit:
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
Ich muss bestätigen, dass ExtractDateTimeFormatted ist da und hat einen gültigen Wert für dieses Attribut. Jede Hilfe wird sehr geschätzt. :)
Lesen von lokalen XML-Datei.
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
Wenn ich diesen Code ausführen bekomme ich eine Fehlermeldung: „nicht definierte Methode 'at' für # on line 21
Diese ist toll, aber ich habe ein Problem damit. Das XML ist dynamisch, da ich jedes Mal, wenn ich den Web-Service betrete, einen neuen Zeit-/Datumsstempel habe. Ich brauche Nokogiri, um das xml aus dem Speicher zu lesen. Also nahm ich meine Savon Anfrage und tat dies: xml = request.to_s() – r3nrut
Das Problem, das ich jetzt bekomme, ist: ContentService_Query.rb: 69: in ' ': undefined Methode' at' f oder # (NoMethodError) –
r3nrut
Nokogiri ist es egal, ob der XML-Code statisch oder dynamisch ist, solange der Tag-Name gleich bleibt und trotzdem gefunden wird. –