0
我正在嘗試讀取從Web服務檢索到的一些XML,並驗證XML中的特定屬性。如何使用Ruby的REXML驗證XML中的特定屬性?
這是XML到標籤,我需要驗證:
<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>
這是我迄今使用REXML用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
我需要驗證ExtractDateTimeFormatted在那裏並且具有該屬性的有效值。任何幫助是極大的讚賞。 :)
從本地xml文件讀取。
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
當我運行這段代碼我得到一個錯誤:「未定義的方法‘在’爲#第21行
這真棒,但我有一個問題。 XML是動態的,因爲每次我點擊Web服務時,都會有一個新的時間/日期戳記。我需要Nokogiri從內存中讀取xml。所以我採取了我的薩貢請求,並做到了這一點: xml = request.to_s() – r3nrut 2010-11-22 18:20:29