如何编写一个bash脚本,将XML文件解析为输入并从文件中删除某些元素
我需要创建一个bash脚本来处理以下示例xml文件:如何编写一个bash脚本,将XML文件解析为输入并从文件中删除某些元素,xml,linux,bash,parsing,Xml,Linux,Bash,Parsing,我需要创建一个bash脚本来处理以下示例xml文件: 检查特定ID并删除该ID的XML分支 ID从文本文件中读取 <?xml version="1.0"?> <cmtf xmlns="urn:RM_UPMS_CMTFEnvelopeSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <data xmlns
<?xml version="1.0"?>
<cmtf xmlns="urn:RM_UPMS_CMTFEnvelopeSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<data xmlns="">
<entitygroup entityname="people">
<PERSON xmlns="abc">
<ID ns="">12280</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">5567</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">3347</ID>
<PIN xmlns="">ededed</PIN>
<NAME xmlns="">rtreer</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">3249</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
</entitygroup>
</data>
</cmtf>
12280
埃雷雷尔
埃雷夫德夫
5567
埃雷雷尔
埃雷夫德夫
3347
埃德德
里尔
3249
埃雷雷尔
埃雷夫德夫
在这里,我需要删除从文本文件读取的ID为12280、3249的所有条目的
标记。也许您可以这样使用php:
<?xml version="1.0"?>
<cmtf xmlns="urn:RM_UPMS_CMTFEnvelopeSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<data xmlns="">
<entitygroup entityname="people">
<PERSON xmlns="abc">
<ID ns="">12280</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">5567</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">3347</ID>
<PIN xmlns="">ededed</PIN>
<NAME xmlns="">rtreer</NAME>
</PERSON>
<PERSON xmlns="bbc">
<ID ns="">3249</ID>
<PIN xmlns="">erererre</PIN>
<NAME xmlns="">ereffdef</NAME>
</PERSON>
</entitygroup>
</data>
</cmtf>
然后您可以使用类似domdocument()的内容来读取xml,并对其进行正确的排序
当然,这是假设您已经安装了php。您可以使用它。创建一个xsl样式表,将输入xml转换为所需的输出。在控制台上,您可以使用xsltproc
(来自xmllint
包):
这将从文件
input\u文件
中读取一系列要删除的ID,并基于input.xml
创建一个output.xml
,删除这些条目:
ed_commands=( )
while read -r num_to_delete; do
ed_commands+=( -d "//PERSON[./ID=$num_to_delete]"
done <input_file
xmlstarlet ed "${ed_commands[@]}" <input.xml >output.xml
ed_命令=()
读取时-r num_to_delete;做
ed_命令+=(-d”//PERSON[/ID=$num_删除]”
完成xml sed
,xml coreutils
的一部分可能是您对xml文件执行简单操作的朋友。