XPath-based anonymization rules
XPath-based rules anonymize XML data using XPath.
Required and Optional Fields
-
name
-
description (optional)
-
rule_id (should be set to XPATH)
-
paths
-
include_files
-
exclude_files (optional)
-
action (optional, default value is ANONYMIZE)
-
replace_value (optional, applicable only when action=REPLACE)
-
shared (optional, default value is true)
-
enabled (optional, default value is true)
Rule Definition Example
{
"name": "XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/data/record[1]/value"],
"include_files": ["*test_config.xml"],
"shared": true
}
Sample Input XML Data
<data>
<record>
<name>password</name>
<value>valueToAnonymize</value>
</record>
<record>
<name>name</name>
<value>value</value>
</record>
</data>
Sample Output XML Data (After Anonymization)
<data>
<record>
<name>password</name>
<value>¶smfz923swc¶</value>
</record>
<record>
<name>name</name>
<value>value</value>
</record>
</data>
More Examples
Example 1: Rule with nested XML structure
Rule definition example:
{
"name": "NESTED_XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/configs/properties/passwd"],
"include_files": ["*config.xml"],
"shared": true
}
Input data:
<?xml version="1.0" encoding="UTF-8" ?>
<configs>
<properties>
<user>abc</user>
<passwd>1234</passwd>
</properties>
</configs>
Output data (after anonymization):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configs>
<properties>
<user>abc</user>
<passwd>¶9165¶</passwd>
</properties>
</configs>
Example 2: Rule with XML array structure
Rule definition example:
{
"name": "ARRAY_XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/configs/properties[2]/passwd"],
"include_files": ["*config.xml"],
"shared": true
}
Input data:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configs>
<properties>
<database>mysql</database>
<url>user@host:port</url>
</properties>
<properties>
<user>abc</user>
<passwd>1234</passwd>
</properties>
</configs>
Output data (after anonymization):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configs>
<properties>
<database>mysql</database>
<url>user@host:port</url>
</properties>
<properties>
<user>abc</user>
<passwd>¶9165¶</passwd>
</properties>
</configs>
Example 3: Rule with XML map structure
Rule definition example:
{
"name": "MAP_XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/configs/properties/passwd"],
"include_files": ["*config.xml"],
"shared": true
}
Input data:
<?xml version="1.0" encoding="UTF-8" ?>
<configs>
<db>mysql</db>
<properties>
<user_name>sa</user_name>
<passwd>sa_pass</passwd>
</properties>
<pooli_size>32</pooli_size>
<timeout>10</timeout>
</configs>
Output data (after anonymization):
<?xml version="1.0" encoding="UTF-8" standalone="no"?><configs>
<db>mysql</db>
<properties>
<user_name>sa</user_name>
<passwd>¶vm_wtto¶</passwd>
</properties>
<pooli_size>32</pooli_size>
<timeout>10</timeout>
</configs>
Example 4: Rule to mask all array elements
Rule definition example:
{
"name": "ALL_FROM_ARRAY_XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/configs/properties[*]/passwd"],
"include_files": ["*config.xml"],
"shared": true
}
Input data:
<?xml version="1.0" encoding="UTF-8" ?>
<configs>
<properties>
<user>abc1</user>
<passwd>pass1</passwd>
</properties>
<properties>
<user>abc2</user>
<passwd>pass2</passwd>
</properties>
</configs>
Output data (after anonymization):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configs>
<properties>
<user>abc1</user>
<passwd>¶smfz7¶</passwd>
</properties>
<properties>
<user>abc2</user>
<passwd>¶smfz8¶</passwd>
</properties>
</configs>
Example 5: Rule to mask some array elements which have passwd
Rule definition example:
{
"name": "SOME_FROM_ARRAY_XPATH_RULE",
"rule_id": "XPATH",
"paths": ["/configs/properties[passwd]/passwd"],
"include_files": ["*config.xml"],
"shared": true
}
Input data:
<?xml version="1.0" encoding="UTF-8" ?>
<configs>
<properties>
<user>abc1</user>
<passwd1>pass1</passwd1>
</properties>
<properties>
<user>abc2</user>
<passwd2>pass2</passwd2>
</properties>
<properties>
<user>abc3</user>
<passwd>pass3</passwd>
</properties>
</configs>
Output data (after anonymization):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configs>
<properties>
<user>abc1</user>
<passwd1>pass1</passwd1>
</properties>
<properties>
<user>abc2</user>
<passwd2>pass2</passwd2>
</properties>
<properties>
<user>abc3</user>
<passwd>¶smfz9¶</passwd>
</properties>
</configs>

