Nav

Example: Remove Certain XML Attributes

You might want to remove specific attributes from within an XML tag that are known to contain sensitive data. The example defines a function in the DataWeave header that removes a specific XML attribute from the passed element and its children.

This example uses:

  • mapObject to go through each element.

  • @ to refer to the attributes in an XML element.

  • if and else to conditionally only list XML attributes when they are present, and also to only recursively call the function when a child element is an object.

  • is to check if each child is of type Object .

  • - to remove an element from the list of XML attributes.

  • inlineCloseOn="empty" on the output directive, so that the output XML displays self-closing tags when there are no values.

DataWeave

         
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
%dw 2.0
input payload application/json
output application/xml inlineCloseOn="empty"
var removeAttribute = (element,attrName) ->
  element mapObject (value, key) -> {
    (key) @(
        (
          if (key.@?)
            (key.@ - attrName)
          else {}
        )
    ) :
    if (value is Object)
      removeAttribute(value, attrName)
    else value
  }
---
removeAttribute(payload, "password")
Input

         
      
1
2
3
4
<users>
  <user username="Julian" password="1234"/>
  <user username="Mariano" password="4321"/>
</users>
Output

         
      
1
2
3
4
5
<?xml version='1.0' encoding='US-ASCII'?>
<users>
  <user username="Julian"/>
  <user username="Mariano"/>
</users>

In this topic: