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:

We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices here. By continuing to use this site you are giving us your consent to do this.

+