我还有一个问题是在Ruby中使用nokogiri处理节点及其多个子节点。我有以下代码:
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|
A = f.css("A").text.gsub(/\n/,"")
B = f.css("B").text.gsub(/\n/,"")
some_other = f.css("some_other").text.gsub(/\s+/, "\/")
#some more code
end #resource
end #sequence list
end #segment
有多个细分,每个细分具有一个SequenceList。每个细分可以有多个资源。我必须使用序列列表“TrackId”收集条件中的不同资源。将使用以下方法检查每个资源包中的信息并进行检查。我怎么能改进我的代码?给出以下结构:
<SegmL>
<Segment>
<Id>UUID</Id>
<Name>name_01</Name>
<SeqList>
<FirstSequence>
<Id>UUID</Id>
<TrackId>UUID</TrackId>
<ResourceList>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</FirstSequence>
<SecondSequence>
<Id>UUID</Id>
<TrackId>UUID</TrackId >
<ResourceList>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
<Resource>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
<D>ddd</D>
</Resource>
</ResourceList>
</SecondSequence>
</SequList>
</Segment>
更新2016/04/11
很抱歉。
我的问题是,我需要类似于序列列表祖先节点下所有资源的包。我必须计算每个资源的值。在该步骤之后,我必须添加两个(或更多)资源。结果是完整序列的新值。但是当我使用我的代码版本时,我会收到序列的每个单独资源。我希望我的问题更清楚。
更新2016/07/11
我的目标输出应该是:
我想遍历每个资源上的序列列表节点。然后我想收集所有资源参数,检查一些条件并计算一个新值。之后,我必须从数组中的每个资源推送每个新的计算值。最后,我检查数组的内容是否有唯一值。
为每个序列列表循环每个段。循环序列列表。
- &GT;在序列列表中循环资源1。检查A是否存在。如果没有将B设置为A.将A乘以C.将新值推送到sequence_array。
- &GT;循环资源2在序列列表中。检查A是否存在。如果没有将B设置为A.将A乘以C.将新值推送到sequence_array。
序列列表循环结束。
sequence_array: 资源1(AxC) 资源2(AxC) ResourceX(AxC)
- &GT;检查sequence_array中的唯一值。如果找到唯一值,则通过定义的方法将消息推送到XML。
sequence_list_uuids也添加到一个单独的数组中并保存。
非常感谢您的帮助和支持!