我需要创建一个操作以下示例xml文件的bash脚本:
从文本文件中读取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="">
<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>
在这里,我需要删除所有从文本文件中读取ID为12280,3249的条目的<PERSON>
标记。
答案 0 :(得分:0)
也许你可以像这样使用php:running php script (php function) in linux bash
然后你就像domdocument(http://php.net/manual/en/class.domdocument.php)这样的东西来阅读和正确的xml。
当然这是假设你安装了php。
答案 1 :(得分:0)
您可以使用XSLT
。创建一个xsl样式表,将输入xml转换为所需的输出。在控制台上,您可以使用xsltproc
(来自xmllint
包):
xsltproc stylesheet.xsl input.xml
答案 2 :(得分:0)
这会从文件input_file
中读取要删除的一系列ID,并根据output.xml
创建input.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
请注意,它需要XMLStarlet。