按祖先节点值

时间:2016-11-04 14:52:50

标签: css ruby xpath nodes nokogiri

我还有一个问题是在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也添加到一个单独的数组中并保存。

非常感谢您的帮助和支持!

0 个答案:

没有答案