У меня есть тысячи записей, похожих на приведенную ниже
<holding>
<holding_id>2225031160001858</holding_id>
<record>
<leader>00210cx a22200085 454500</leader>
<controlfield tag="001">h38165-01alliance_ohsu</controlfield>
<controlfield tag="004">b10145746-01alliance_ohsu</controlfield>
<controlfield tag="005">20200417125900.0</controlfield>
<controlfield tag="008">2004170u\\\\0\\\0001aaund0999999</controlfield>
<datafield ind1="2" ind2=" " tag="852">
<subfield code="b">OHSUMAIN</subfield>
<subfield code="c">oldstorjrl</subfield>
</datafield>
</record>
</holding>
Мне нужно изменить datafield
@ ind1
на "", где @ tag="852
"И не subfield
с @ code="h"
существует. В этом примере @ code="b"
и @ code="c"
существуют, но @ code="h"
нет, поэтому я бы хотел изменить эту запись.
Я могу придумать способы достижения sh что мне нужно, используя программную логику c, но могу ли я использовать xmlstarlet напрямую, чтобы выбрать нужные узлы на основе отсутствия подузла?
Желаемый вывод из этой записи будет
<holding>
<holding_id>2225031160001858</holding_id>
<record>
<leader>00210cx a22200085 454500</leader>
<controlfield tag="001">h38165-01alliance_ohsu</controlfield>
<controlfield tag="004">b10145746-01alliance_ohsu</controlfield>
<controlfield tag="005">20200417125900.0</controlfield>
<controlfield tag="008">2004170u\\\\0\\\0001aaund0999999</controlfield>
<datafield ind1=" " ind2=" " tag="852">
<subfield code="b">OHSUMAIN</subfield>
<subfield code="c">oldstorjrl</subfield>
</datafield>
</record>
</holding>