kls*_*fhl 2 xml xpath xmlstarlet
如何过滤掉某些类型的元素,这些元素没有具有魔术值的属性并保留文档的其余部分?所有这些使用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
Run Code Online (Sandbox Code Playgroud)
和
xmlstarlet sel -t -m "*" -c "*[not(self::some[@name != 'A'])]" database.xml
Run Code Online (Sandbox Code Playgroud)
产量
<some name="A"/><text>this is some text to be applied...</text><project>
<test deeper="structure"/>
</project>
Run Code Online (Sandbox Code Playgroud)
但这隐藏了我的宝贵<database>
tag
.除了缩进,这不是一个问题...并且当<some>
不是例如<database>
孩子的直接后裔时不起作用<project>
.
我想是数据库,因为它是,但都<some>
删除,除了指定的一个A
:
<database>
<some name="A" />
<text>this is some text to be applied...</text>
<project>
<test deeper="structure"/>
</project>
</database>
Run Code Online (Sandbox Code Playgroud)
问候
不幸的是,xmlstarlet sel
不支持apply-templates
,但您可以使用此ed
命令:
xmlstarlet ed -d '/database//some[@name != "A"]' input.xml
Run Code Online (Sandbox Code Playgroud)