Xmlstarlet |删除具有指定值的条目

问题描述 投票:0回答:1

我有这样的东西

<?xml version="1.0"?>
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
  <Menu>
    <Name>Personal</Name>
    <Directory>xfce-personal.directory</Directory>
    <Include>
      <And>
        <Category>Settings</Category>
        <Category>X-XFCE-SettingsDialog</Category>
        <Category>X-XFCE-PersonalSettings</Category>
      </And>
      <Filename>brightness-frontend.desktop</Filename>
      <Filename>xscreensaver-properties.desktop</Filename>
    </Include>
  </Menu>
</Menu>

我要删除

 <Filename>brightness-frontend.desktop</Filename>

尝试运行xmlstartlet

/usr/bin/xmlstarlet ed -d  "//Include[Filename='brightness-frontend.desktop']"  /tmp/1.xml

但是删除所有“包含”部分以及所有子项。如何仅删除具有Brightness-frontend.desktop值的Filename节点?

xml linux xmlstarlet
1个回答
1
投票

XPath查询//Include[Filename='...']将与Include节点本身匹配,该节点包括其下的所有子节点。请注意,Filename是单独的XML元素,而不是Include属性的属性。

© www.soinside.com 2019 - 2024. All rights reserved.