Bash 如何使用shell命令从XML文件中删除XML节点

Bash 如何使用shell命令从XML文件中删除XML节点,bash,shell,Bash,Shell,我正在尝试使用shell脚本删除xml节点。XML文件如下所示 <?xml version="1.0" encoding="UTF-8"?> <RecordType xmlns="http://soap.test.com/2006/04/metadata"> <fullName>User_Name</fullName> <active>true</acti

我正在尝试使用shell脚本删除xml节点。XML文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<RecordType xmlns="http://soap.test.com/2006/04/metadata">
    <fullName>User_Name</fullName>
    <active>true</active>
    <businessProcess>Name Process</businessProcess>
    <label>Name</label>
    <picklistValues>
        <picklist>Picklist1</picklist>
        <values>
            <fullName>Test</fullName>
            <default>false</default>
        </values>
    </picklistValues>
    <picklistValues>
        <picklist>Picklist2</picklist>
        <values>
            <fullName>FirstName</fullName>
            <default>false</default>
        </values>
        <values>
            <fullName>LastName</fullName>
            <default>false</default>
        </values>
    </picklistValues>
</RecordType>

请建议。

假设您的输入是一个名为test.XML的文件中格式良好的XML,该文件包含:

<?xml version="1.0"?>
<root>
  <picklistValues>
    <picklist>Picklist1</picklist>
    <values>
      <fullName>Value1_1</fullName>
    </values>
    <values>
      <fullName>Value1_2</fullName>
    </values>
  </picklistValues>
  <picklistValues>
    <picklist>Picklist2</picklist>
    <values>
      <fullName>Value2_1</fullName>
    </values>
    <values>
      <fullName>Value2_2</fullName>
    </values>
  </picklistValues>
</root>

使用专用的xml工具,如xmllint。@daniu您是否有任何工作示例请显示您期望的输出。您的输入不是格式正确的xml。我已更正了格式,与您提到的格式相同。但当我尝试用更正的xml解决方案时,它不起作用。我在命令中做了一点更改,现在它起作用了
xmlstarlet ed-N=”http://soap.test.com/2006/04/metadata“--删除'//N:picklistValues[N:picklist/text()=“Picklist2”]'test.xml
谢谢@Pierre
<?xml version="1.0"?>
<root>
  <picklistValues>
    <picklist>Picklist1</picklist>
    <values>
      <fullName>Value1_1</fullName>
    </values>
    <values>
      <fullName>Value1_2</fullName>
    </values>
  </picklistValues>
  <picklistValues>
    <picklist>Picklist2</picklist>
    <values>
      <fullName>Value2_1</fullName>
    </values>
    <values>
      <fullName>Value2_2</fullName>
    </values>
  </picklistValues>
</root>
xmlstarlet ed --delete '//picklistValues[picklist/text()="Picklist2"]' test.xml