Today I needed to delete all attributes of a XML Node except of some special ones. I found a solution by using the local-name() method. An expression like local-name()!=’attributeKey’ excludes the attribute with the name “attributeKey” from the selection. In a XML Node like:
<ent:address street="MuellerWeg" streetnumber="151" city="Cologne" country="Germany" zipcode="50935" xsi:type="ent:StreetnumberAddress">
A XPath expression like:
/ent:address /@*[local-name()!='street' and local-name()!='type' and local-name()!='zipcode']
will delete all attributes exept “street” and “zipcode”. If you don’t want to delete the “xsi:type” attribute you have to add “and local-name()!=’type'”.
Unfortunately I did not found a method to find the attribute name and the namespace (eg. xsi:type). This would minimize the risk to filter the wrong attribute.
A easy way to check XPath expressions is to use the “XPath Checker” plugin for Firefox. You can find it here >>