Hello Users.
 
I have an .xml file that I want to search for specific items, ignoring the 
remaining items. I have dumped the .xml file using the tree method. Partial 
results look as follows:
 
$VAR1 = [
          'Session',
          [
            {},
            'Hostname',
            [
              {
                'RemoteHost' => '\\\\SCADA',
                'Remote' => '0'
              },
              'Server',
              [
                {
                  'GroupCount' => '1',
                  'Connected' => '1',
                  'Name' => 'Kepware.KEPServerEX.V5'
                },
                'Group',
                [
                  {
                    'PercentDeadband' => '0.00',
                    'Connected' => '2',
                    'TimeBias' => '-420',
                    'ItemCount' => '26283',
                    'Active' => '-1',
                    'ReqUpdateRate' => '10000',
                    'Name' => '11-30'
                  },
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.EY_01_1001'
                  ],
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.Always_Off_Bit'
                  ],

.
.
. (There are many items so I did not include all of them.
.
.
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.PSHH_01_1010.ClassCTimer.CTL_x.CTL_11'
                  ]
                ]
              ]
            ]
          ]
        ];

I want to be able to maintain the .xml file integrity, so I want to open the 
original and after finding what I am looking for, dump the results to a second 
file.
 
As an example, the file has many "Item" entries with the text, 
 
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.ACKNOWLEDGE.Latched'
                  ],

I want to be able to parse the original .xml file, find all items that contain 
the text, '.Latched', and output the results similar to the following:
 
 
$VAR1 = [
          'Session',
          [
            {},
            'Hostname',
            [
              {
                'RemoteHost' => '\\\\SCADA',
                'Remote' => '0'
              },
              'Server',
              [
                {
                  'GroupCount' => '1',
                  'Connected' => '1',
                  'Name' => 'Kepware.KEPServerEX.V5'
                },
                'Group',
                [
                  {
                    'PercentDeadband' => '0.00',
                    'Connected' => '2',
                    'TimeBias' => '-420',
                    'ItemCount' => '26283',
                    'Active' => '-1',
                    'ReqUpdateRate' => '10000',
                    'Name' => '11-30'
                  },
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.ACKNOWLEDGE.Latched'
                  ],
                  'Item',
                  [
                    {
                      'ReqDataType' => '0',
                      'AccessPath' => '',
                      'Active' => '-1'
                    },
                    0,
                    '11-30.PLC.Global.EY_01_1001.Latched'
                  ]
                ]
              ]
            ]
          ]
        ];

I checked the Net but did not find an "extraction" example that maintains the 
.xml integrity.
 
I am thinking I would need logic to do the following.
 
1. Open the .xml file.
2. Begin parsing.
3. If the object is not 'Item', keep it. (This will keep objects such as 
'Session', 'Server', 'Group')
4. If the object is 'Item', and it contains the text, '.Latched', keep it.
5. Otherwise, ignore 'Item'
6. Open the output file.
7. Write out all the kept items.
8. Close both files.
 
Any help would be greatly appreciated.
 
Paul Rousseau
                                          
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to