Bash 如何使用shell命令从XML文件中删除XML节点
我正在尝试使用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
<?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