【发布时间】:2020-04-21 03:15:19
【问题描述】:
我有数千条类似于下面的记录
<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" 没有,所以我想修改这条记录。
我可以想办法使用程序逻辑来完成我需要的事情,但是我可以直接使用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>
【问题讨论】:
-
请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
-
欢迎来到 Stack Overflow。 SO 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。
标签: xmlstarlet