读取 XML 负载并删除某些标签的数据

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

我需要读取 XML 格式的传入有效负载,检查某些标签的数据是否存在,并删除数据(如果存在)。 下面是我需要读取和删除数据的示例 XML。在下面的 xml 中,我需要检查 SSN、IDNumber 和 DriverNo 的数据是否存在。如果数据存在,我需要删除/删除数据。我还需要保留 XML 格式。请帮我解决这个问题,因为我是 XML 转换的新手。谢谢!

<ns0:session Destination="ALL" id="88888" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e" charge="-5941" count="1" dateStamp="2021-09-07T04:39:14" effectiveDate="2021-09-06" index="1" policyID="88888" sequence="3" transactionType="Cancel" transGroup="tE7E43B47B9234B15B5CE27444FA96909" transHistoryId="1051484" type="onset" OOSInsertIndex="1" finalReapplyCRPair="0" xmlns:ns0="http://Atlas.Schemas.Policy/1.0">
    <data id="d65845D5408974BC7BD8286A45AF48B9E" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
        <account id="a2F6F1D78A33C4C2CB980B68AE8349B19" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
            <SSN>123456789</SSN>
            <IDNumber>129</IDNumber>
            <name>testing</name>
            <driver change="0" written="0" id="d2788BE2CFE0E459DBDC221015A30A45C" deleted="0" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
                <DriverNo>0000000000000</DriverNo>
                <DriverLockedIndicator>0</DriverLockedIndicator>
            </driver>
        </account>
    </data>
</ns0:session>

如果没有这些字段的数据,预期输出将相同。以下是预期的样本:

<ns0:session Destination="ALL" id="88888" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e" charge="-5941" count="1" dateStamp="2021-09-07T04:39:14" effectiveDate="2021-09-06" index="1" policyID="88888" sequence="3" transactionType="Cancel" transGroup="tE7E43B47B9234B15B5CE27444FA96909" transHistoryId="1051484" type="onset" OOSInsertIndex="1" finalReapplyCRPair="0" xmlns:ns0="http://Atlas.Schemas.Policy/1.0">
    <data id="d65845D5408974BC7BD8286A45AF48B9E" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
        <account id="a2F6F1D78A33C4C2CB980B68AE8349B19" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
            <name>testing</name>
            <driver change="0" written="0" id="d2788BE2CFE0E459DBDC221015A30A45C" deleted="0" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
                <DriverLockedIndicator>0</DriverLockedIndicator>
            </driver>
        </account>
    </data>
</ns0:session>
mule dataweave mulesoft mule4 mule-esb
1个回答
0
投票

如果您不介意使用

update
运算符使元素为空,那么只需指定需要替换哪些元素即可:

%dw 2.0
output application/xml
---
payload  update {
    case .session.data.account.SSN -> ""
    case .session.data.account.IDNumber -> ""
    case .session.data.account.driver.DriverNo -> ""
}

输出:

<?xml version='1.0' encoding='UTF-8'?>
<ns0:session xmlns:ns0="http://Atlas.Schemas.Policy/1.0" Destination="ALL" id="88888" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e" charge="-5941" count="1" dateStamp="2021-09-07T04:39:14" effectiveDate="2021-09-06" index="1" policyID="88888" sequence="3" transactionType="Cancel" transGroup="tE7E43B47B9234B15B5CE27444FA96909" transHistoryId="1051484" type="onset" OOSInsertIndex="1" finalReapplyCRPair="0">
  <data id="d65845D5408974BC7BD8286A45AF48B9E" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
    <account id="a2F6F1D78A33C4C2CB980B68AE8349B19" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
      <SSN/>
      <IDNumber/>
      <name>testing</name>
      <driver change="0" written="0" id="d2788BE2CFE0E459DBDC221015A30A45C" deleted="0" ODSId="633d8812-b35b-4f12-8206-09f2d1a1455e">
        <DriverNo/>
        <DriverLockedIndicator>0</DriverLockedIndicator>
      </driver>
    </account>
  </data>
</ns0:session>
© www.soinside.com 2019 - 2024. All rights reserved.