xmlstarlet 不工作

xmlstarlet does not works

我想请教一些方向,因为我尝试了不同的方法,但我无法实现我的目标。

我的主要目标是能够在找到某个键​​时删除 destructiveChanges.xml 的整个块,在这种情况下,当前值为“ApexClass”,因此必须删除整个块。

  **<types>
    <name>ApexClass</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>**

这是我的代码:

**job1:
  stage: test
  before_script:
    - apt-get update;apt-get install -y xmlstarlet
  script:
    - nomDeployedDC=${NONDEPLOYEDDC}
    - echo -e "Test ${nomDeployedDC} "
    - >
      if [ ! -z "$nomDeployedDC" ]; then
          echo "=== Additional cleaning ==="          
          for cleanItem in ${nomDeployedDC}; do
              metadaType=${cleanItem%:*}
              echo -e "Loop ${metadaType} "
              cat destructiveChanges.xml
              echo -ne "Cleaning ${metadaType} "
              xmlstarlet ed --inplace -d '//_:types[_:name="${metadaType}"]' destructiveChanges.xml
              cat destructiveChanges.xml
              echo -e "\rCleaning final ${metadaType} "
          done
          isDeleted="$(grep -c "<types>" destructiveChanges.xml)"
          deleted=${isDeleted%:*}
          echo -e "isDeleted ${deleted} "        
          if [ "$deleted" == 1 ]; then
              echo "=== Deleting destructiveChanges.xml file ===" 
              rm - destructiveChanges.xml
          fi          
      else 
          echo -e "Additional cleaning should be added in the destructiveClean.list file "
      fi**

输出

**

=== Additional cleaning ===
Loop ApexClass 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
  <types>
    <name>ApexClass</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
  <types>
    <name>EmailTemplate</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
  <types>
    <name>CustomObject</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
</Package>Cleaning ApexClass <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
  <types>
    <name>ApexClass</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
  <types>
    <name>EmailTemplate</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
  <types>
    <name>CustomObject</name>
    <members>CC_CaseScenarioMatchingJobQueueable</members>
  </types>
</Package>
Cleaning final ApexClass 
isDeleted 3 
Cleaning up file based variables
00:01
Job succeeded

**

有没有人可以帮我解决这个问题? 非常感谢!

要考虑命名空间,请尝试更改

xmlstarlet ed --inplace -d '//_:types[_:name="${metadaType}"]' destructiveChanges.xml

xmlstarlet ed -L -N x="http://soap.sforce.com/2006/04/metadata"  -d "//x:Package//x:types[x:name[text()='${metadaType}']]"  destructiveChanges.xml

看看它是否有效。