如何筛选出某些类型的元素,这些元素不具有具有魔术值的属性,并保留文档的其余部分?所有这些都是使用xmlstarlet
?
我要做的是:
cat << EOF > database.xml
<?xml version="1.0"?>
<database>
<some name="A" />
<some name="B" />
<some name="C" />
<text>this is some text to be applied...</text>
<project>
<test deeper="structure"/>
</project>
</database>
EOF
和
xmlstarlet sel -t -m "*" -c "*[not(self::some[@name != 'A'])]" database.xml
产量
<some name="A"/><text>this is some text to be applied...</text><project>
<test deeper="structure"/>
</project>
但这隐藏了我宝贵的。除了压痕,这不是问题…当
<database>
不是tag
的直系后代时不起作用,例如<some>
的子代。我想得到的是数据库的原样,但是除了名为
<database>
的数据库之外,所有的<project>
都被删除了:<database>
<some name="A" />
<text>this is some text to be applied...</text>
<project>
<test deeper="structure"/>
</project>
</database>
问候语
最佳答案
不幸的是,xmlstarlet的sel
不支持apply-templates
,但您可以使用ed
命令执行以下操作:
xmlstarlet ed -d '/database//some[@name != "A"]' input.xml