के भीतर नोकोगिरी और ऊपरी पूर्वजों नोड का उपयोग करके एकाधिक नोड्स का चयन करना पिछले दिन मैं पूर्वजों नोड में एक संदर्भ चर के अधीन नोकोगिरी का उपयोग करके एकाधिक नोड्स प्राप्त करने के लिए किसी भी समाधान की खोज कर रहा था।एक परिवर्तनीय
मुझे क्या चाहिए: असल में मैं "सेगमेंट" नोड के सभी "आईडी" एकत्र कर रहा हूं। फिर मैं "सेगमेंट" नोड के साथ आने वाले सभी "संसाधन" को एकत्र करना चाहता हूं। "संसाधन" एकत्र करने के लिए मैं एक चर के रूप में "आईडी" सेट करना चाहता हूं।
<CPL>
<SegmL>
<Segment>
<Id>UUID</Id> #UUID as a variable
<Name>name_01</Name>
<SeqL>
<ImageSequence>
<Id>UUID</Id>
<Track>UUID</Track>
<ResourceList>
<Resource> #depending on SegmentId
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</ImageSequence>
<AudioSequence>
<Id>UUID</Id>
<Track>UUID</Track>
<ResourceList>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</AudioSequence>
</SequL>
</Segment>
<Segment>
<Id>UUIDa</Id>
<Name>name_02</Name>
<SequL>
<ImageSequence>
<Id>UUID</Id>
<Track>UUID</Track>
<ResourceList>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</ImageSequence>
<AudioSequence>
<Id>UUID</Id>
<Track>UUID</Track>
<ResourceList>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</AudioSequence>
</SequL>
</Segment>
</SegmL>
</CPL>
सभी संसाधन डाटा प्रत्येक के साथ A = Resource.css("A").text.gsub(/\n/,"")
#first each do
cpls.each_with_index do |(cpl_uuid, mycpl), index|
cpl_filename = mycpl
cpl_file = File.open("#{resource_uri}/#{cpl_filename}")
cpl = Nokogiri::XML(cpl_file).remove_namespaces!
#get UUID for UUID checks
cpl_uuid = cpl.css("Id").first.text.gsub(/\n/,"")
cpl_root_edit_rate = cpl.css("EditRate").first.text.gsub(/\s+/, "\/")
#second each do
cpl.css("Segment").each do |s| # loop segment
cpl_segment_list_uuid = s.css("Id").first.text.gsub(/\n/,"") #uuid of segment list
#third each do
cpl.css("Resource").each do |f| #loop resources
cpl_A = f.css("A").text.gsub(/\n/,"") # uuid of A
cpl_B = f.css("B").text.gsub(/\n/,"") # uuid of B
end #third
end #second
end #first
मेरे अभिव्यक्ति एकत्र मुझे इन एक सरणी में संग्रहीत जानकारियां देता है:
A = 48000.0
B = 240000.0
C = 0.0
D = 240000.0
Some functions to calculate an average on the resources.
puts all_arry
A = 5.0
B = 5.0
C = 5.0
D = 5.0
A = 5.0
B = 5.0
C = 5.0
D = 5.0
=8 values -> only 4 values existing for the exact loop (2 average values per Segment)
पल सब "SegmentId" सब एकत्रित "पर संसाधन "
मैं बाद के संसाधनों को वास्तव में कैसे आवंटित कर सकता हूं प्रत्येक सेगमेंट आईडी एक चर के रूप में?
मैं इस कोड का इस्तेमाल किया था, लेकिन पाश खाली है, क्योंकि betwerrn "सेगमेंट" की "आईडी" और प्रत्येक "संसाधन" 'ए', 'बी' कुछ और नोड्स के बारे में सोच ...:
if cpl.at("Segment/Id:contains(\"#{cpl_segment_list_uuid}\")")
cpl.css("Resource").each do |f|
#collecting resources here for each segmet
end
end
सभी नोड्स नहीं attribues, आईडी, वर्ग, आदि
तुम मुझे मेरी समस्या के साथ मदद कर सकते हैं हो सकता है। सबसे पहले मैं आपके समर्थन के लिए विनम्रता से धन्यवाद दूंगा!
अद्यतन 10/07/16
मैं भी संसाधनों पर "प्रत्येक करना" के लिए निम्नलिखित भाव के साथ कोड चला:
expression = "/SegmetList/Segment[Id>cpl_segment_list_uuid]"
cpl.xpath(expression).each do |f|
यह चलाता है "प्रत्येक करते हैं" , लेकिन मैं आंतरिक नोड्स पिछले के रूप में
cpl.css("Segment:contains(\"#{cpl_segment_list_uuid}\") > Resource").each do |f|
ही नहीं मिला
,210और एक "अगर" शर्त, यह भी एक ही समस्या के साथ:
if cpl.at("Segment/Id:contains(\"#{cpl_segment_list_uuid}\")").each do|f|
#some code
end
अद्यतन 2016/18/10
असल में मैं संसाधन (4) की सही संख्या मिलता है, लेकिन अभी भी प्रत्येक सेगमेंट के लिए अलग नहीं है। तो प्रत्येक सेगमेंट में वही चार संसाधन हैं।
मुझे सभी संसाधनों की दोहरी संख्या क्यों नहीं मिलती है, कि मैं "सेगमेंट" -लूप में सरणी बना देता हूं।
#first each do
cpls.each_with_index do |(cpl_uuid, mycpl), index|
cpl_filename = mycpl
cpl_file = File.open("#{resource_uri}/#{cpl_filename}")
cpl = Nokogiri::XML(cpl_file).remove_namespaces!
#get UUID for UUID checks
cpl_uuid = cpl.css("Id").first.text.gsub(/\n/,"")
cpl_root_edit_rate = cpl.css("EditRate").first.text.gsub(/\s+/, "\/")
#second each do
cpl.css("Segment").each do |s| # loop segment
cpl_segment_list_uuid = s.css("Id").first.text.gsub(/\n/,"") #uuid of segment list
array_for_resource_data = Array.new
#third each do
s.css("Resource").each do |f| #loop resources #all resources
s.search('//A | //B').each do |f| #selecting only resources "A" and "B"
cpl_A = f.css("A").text.gsub(/\n/,"") # uuid of A
cpl_B = f.css("B").text.gsub(/\n/,"") # uuid of B
end #third
end #second
end #first
मुझे आशा है कि मेरे अद्यतन आपको और अधिक जानकारी दे देंगे:
यह वर्तमान कोड है। आपकी मदद और उत्तर के लिए बहुत बहुत धन्यवाद!
अद्यतन 2016/31/10
क्षेत्रों के डबल उत्पादन के साथ समस्या का समाधान होने।
cpl.css("Segment").each do |u|
segment_list_uuid = u.css("Id").first.text.gsub(/\n/,"")
sequence_list_uuid_arr = Array.new
u.xpath("//SequenceList[//*[starts-with(name(),'Sequence')]]").each do |s|
sequence_list_uuid = s.css("TrackId").first.text#.gsub(/\n/,"")
sequence_list_uuid_arr.push(cpl_sequence_list_uuid)
#following some resource nodes
s.css("Resource").each do |f|
asset_uuid = f.css("TrackFileId").text.gsub(/\n/,"")
resource_uuid = f.css("Id").text.gsub(/\n/,"")
edit_rate = f.css("EditRate").text.gsub(/\s+/, "\/")
#some more code
end #resource
end #sequence list
end #segment
अब मैं प्रत्येक अद्वितीय अनुक्रम के तहत सभी अलग "संसाधन" प्राप्त करना चाहते हैं: अब मैं खंडों के तहत प्रत्येक क्रम पर एक और पाश की है। मुझे सभी अलग-अलग संसाधनों को सूचीबद्ध करना होगा और एकत्रित मूल्यों में से कुछ को जोड़ना होगा।
क्या प्रत्येक संसाधन को "अनुक्रम आईडी" के तहत अलग-अलग मानों (उप नोड्स) के साथ एकत्र करने का कोई तरीका है? फिलहाल, मुझे किसी भी समाधान के लिए कोई जानकारी नहीं है .... इसलिए कोई कोड नहीं है जो मैं आपको दिखा सकता हूं, जो भागों में काम करेगा।
"संसाधन" लूप के लिए प्रत्येक_with_index काम नहीं करता है।
क्या आप कृपया मेरी नई समस्या के साथ मेरी मदद करने के लिए कुछ विचार या कोई दृष्टिकोण हो सकते हैं?