До сих пор я делал простые вещи в bash с помощью sed, awk, while и т.д.
Что мне нужно сделать дальше, гораздо сложнее, и я не знаю, с чего начать.
У меня есть файл XML, и мне нужно добавить элемент (ы) к нему на основе другой информации в файле XML.
Какие инструменты я должен использовать для достижения этой цели? в то время как циклы, массивы, седь?
Получить список составных идентификаторов и сохранить их в массиве
Для каждого составного идентификатора найдите все отдельные идентификаторы, которые совпадают с составным идентификатором, и сохраните результаты каждого отдельного идентификатора в массиве.
а. Если какой-либо из отдельных идентификаторов имеет положительный тег, создайте новый в XML-файле и установите положительный.
б. Если все отдельные идентификаторы имеют отрицательный тег, создайте новый в XML-файле и установите отрицательный.
Например, это пример того, как будет выглядеть оригинальный XML-файл:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<waterSample>
<HeaderInformation>
<ReportSerialNumber>987754</ReportSerialNumber>
</HeaderInformation>
<sample>
<site>40</site>
<sampleid>040-2016-12387</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid></compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-001</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Negative</result>
<units>10oz</units>
</sample>
<sample>
<site>40</site>
<sampleid>040-2016-12388</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid>78979</compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-002</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Negative</result>
<units>10oz</units>
</sample>
<sample>
<site>40</site>
<sampleid>040-2016-12389</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid>78979</compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-003</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Positive</result>
<units>10oz</units>
</sample>
</waterSample>
Вот как будет выглядеть файл после запуска кода:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<waterSample>
<HeaderInformation>
<ReportSerialNumber>987754</ReportSerialNumber>
</HeaderInformation>
<sample>
<site>40</site>
<sampleid>040-2016-12387</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid></compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-001</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Negative</result>
<units>10oz</units>
</sample>
<sample>
<site>40</site>
<sampleid>040-2016-12388</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid>78979</compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-002</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Negative</result>
<units>10oz</units>
</sample>
<sample>
<site>40</site>
<sampleid>040-2016-12389</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid>78979</compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid>789-879717-003</labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Positive</result>
<units>10oz</units>
</sample>
<sample>
<site>40</site>
<sampleid>040-2016-78979</sampleid>
<productcode>AQUA</productcode>
<productdescription>10ozAquafina</productdescription>
<testcode>Oxygen</testcode>
<testdescription>Test for Oxygen</testdescription>
<sequence>0</sequence>
<sampledate>2016-05-27T16:03:00-05:00</sampledate>
<prefix></prefix>
<addendum></addendum>
<compositeid></compositeid>
<samplename>Water</samplename>
<sampledescription>Tasty Water</sampledescription>
<labsampleid></labsampleid>
<receivedby>John Doe</receivedby>
<receivetime>2016-05-28T10:49:43-04:00</receivetime>
<reporttime>2016-05-30T11:30:11-04:00</reporttime>
<result>Positive</result>
<units>10oz</units>
</sample>
</waterSample>