Не стоит писать весь код для вашей работы, но я все еще делаю это, чтобы вы могли понять, как подходить к конкретной проблеме.
Здесь я предоставляю вамсамый простой подход (может быть неэффективным)
1. Упростите ввод данных и упростите свою жизнь.Определите конкретный шаблон, с помощью которого ваш код может идентифицировать начало и конец XML.
Dima_chkTimeValidation(&dacl_ts_pumpPWMLowNoDos_str,
&dacl_ti_pumpPWMLowNoDos_U16,
ti_valid_U16,
ti_inval_U16,
(tB)(dacl_r_pumpPwmResidualFilt_S16 < r_testlimit_S16),
(tB)((testCond_B == TRUE) && (dosingActive_B == FALSE)),
TRUE);
/*****************************************/
/*[[[ Start XML
< DTC >
< TroubleCode > 1101 < /TroubleCode >
< Classification > FAULT < /Classification >
< SelfHealing > No selfhealing < /SelfHealing >
< WarningLamp > No Warning Lamp lt /WarningLamp >
< DirectDegradation > No Action < /DirectDegradation >
< Order > PRIMARY < /Order >
< /DTC >
End XML]]]*/
/*******************************/
/* special test when run i sequence test mode SMHD_DOSVALVE_E */
if ((s_seqTestCtrlStatus_E == SMHD_RUNNING_E) && (s_seqTestMainState_SMHD_DOSVALVE_E))
{
/* Use result from DDOS test */
Dima_chkValidation(&dacl_ts_pumpPWMLowDos_str,
(tB)(s_dosValveTest_E == SMHD_TESTFAILED_E),
(tB)(s_dosValveTest_E != SMHD_TESTNOTFINISHED_E));
}
Здесь вы можете определить шаблон, который я сохранил для определения начала xml и конца xml
2. Далее идет код.Теперь я попытался написать это так же "C", за исключением регулярных выражений.
#!/usr/bin/perl
#
#
open(FD,"< Code.cpp") or die "unable to open file: $!\n";
my $start_xml = 0 ; ## 0 indicates false condition ..i.e either XML not started or XML ended
## 1 means xml has started.
while(< FD >){
chomp($_);
## Handling only single Line comments
my $temp = $_;
if($temp =~ m/\[\[\[\s*start\s*xml/ig && $start_xml == 0){ ## Check if start xml pattern found
$start_xml = 1;
next; ## equivalent to continue of C
}
if(($temp =~ m/< [a-z0-9 -&!@]+ >.*/ig) && ($start_xml == 1)){ ## You can add additional letters that may come
## In such cases pattern matching wont be necessary as you know
# you have got XML data between start and end xml pattern. But still...
# some case you might need it
print "$temp\n"; ## I am printing it out , but you may write it to file
}elsif($temp =~ m/end\s*xml\s*\]\]\]/ig){
$start_xml = 0;
last; ## equivalent to break in C
}
}
close FD;
ПРИМЕЧАНИЕ :: В тексте и в теге <пробел> после «<» и после «>»код.Итак, удалите это пространство, когда вы запускаете код.
Тип шаблона, выбранный для обнаружения xml, взятого из "Python cog" :)