【问题标题】:XMLStarlet delete parent nodeXMLStarlet 删除父节点
【发布时间】:2021-03-19 03:19:46
【问题描述】:

我是使用 XMLStarlet 的新手,我想知道是否有可能删除一个父节点,该节点的子节点在其标签内具有特定值。

在我的示例中,我想删除具有特定值“”内部的节点“” >第二个标签“:

开始 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <tabVisibilities>
        <tab>FirstTab</tab>
        <visibility>DefaultOn</visibility>
    </tabVisibilities>
    <tabVisibilities>
        <tab>SecondTab</tab>
        <visibility>DefaultOn</visibility>
    </tabVisibilities>
    <tabVisibilities>
        <tab>ThirdTab</tab>
        <visibility>DefaultOff</visibility>
    </tabVisibilities>
</Profile>

预期的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <tabVisibilities>
        <tab>FirstTab</tab>
        <visibility>DefaultOn</visibility>
    </tabVisibilities>
    <tabVisibilities>
        <tab>ThirdTab</tab>
        <visibility>DefaultOff</visibility>
    </tabVisibilities>
</Profile>

非常感谢你,大卫。

【问题讨论】:

  • 我们鼓励提问者展示他们迄今为止为自己解决问题所做的尝试。

标签: xml xslt xml-namespaces xmlstarlet


【解决方案1】:

您的文件使用命名空间。

xmlstarlet edit -N ns='http://soap.sforce.com/2006/04/metadata' --delete "//ns:tabVisibilities[ns:tab[contains(text(),'SecondTab')]]" file.xml

输出:

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
  <tabVisibilities>
    <tab>FirstTab</tab>
    <visibility>DefaultOn</visibility>
  </tabVisibilities>
  <tabVisibilities>
    <tab>ThirdTab</tab>
    <visibility>DefaultOff</visibility>
  </tabVisibilities>
</Profile>

见:xmlstarlet edit --help

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多