我需要读取 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>
如果您不介意使用
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>