fix: skip blank xml nodes and attributes when anonymizing data

This commit is contained in:
Björn Fromme
2026-06-24 13:59:04 +02:00
parent a15c7578c3
commit 23a3430ea5
2 changed files with 128 additions and 31 deletions
+79
View File
@@ -236,6 +236,85 @@ XML;
$this->assertSame('900002', $secondCustomerId);
}
public function testAnonymizePreservesEmptyNodesAndAttributes(): void
{
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<anfrage>
<user></user>
<key/>
<email> </email>
<passwort></passwort>
<anmelder id="">
<name/>
<vorname> </vorname>
<anrede></anrede>
<geschlecht>W</geschlecht>
<nationalitaet></nationalitaet>
<geburtsdatum/>
<anschrift>
<id></id>
<strasse/>
<plz>12345</plz>
<ort> </ort>
<land></land>
</anschrift>
<kommunikation>
<email></email>
<telefonmobil>01701234567</telefonmobil>
<telefonprivat/>
<newsletter></newsletter>
</kommunikation>
<bankverbindung>
<iban></iban>
</bankverbindung>
<sonstiges1/>
<sonstiges2>75</sonstiges2>
<sonstiges3></sonstiges3>
</anmelder>
<kundennamen>
<kunde id="" art="Teilnehmer" name="" vorname="Ada"/>
</kundennamen>
</anfrage>
XML;
$anonymizer = new BpnXmlAnonymizer();
$result = $anonymizer->anonymize($xml);
$document = new \DOMDocument();
$this->assertTrue($document->loadXML($result));
$xpath = new \DOMXPath($document);
$this->assertSame('', trim((string) $xpath->evaluate('string(/anfrage/user)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(/anfrage/key)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(/anfrage/email)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(/anfrage/passwort)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/@id)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/name)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/vorname)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/anrede)')));
$this->assertSame('D', trim((string) $xpath->evaluate('string(//anmelder/geschlecht)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/nationalitaet)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/geburtsdatum)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/anschrift/id)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/anschrift/strasse)')));
$this->assertNotSame('12345', trim((string) $xpath->evaluate('string(//anmelder/anschrift/plz)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/anschrift/ort)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/anschrift/land)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/kommunikation/email)')));
$this->assertSame('01000000002', trim((string) $xpath->evaluate('string(//anmelder/kommunikation/telefonmobil)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/kommunikation/telefonprivat)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/kommunikation/newsletter)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/bankverbindung/iban)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/sonstiges1)')));
$this->assertSame('70', trim((string) $xpath->evaluate('string(//anmelder/sonstiges2)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//anmelder/sonstiges3)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//kundennamen/kunde/@id)')));
$this->assertSame('', trim((string) $xpath->evaluate('string(//kundennamen/kunde/@name)')));
$this->assertNotSame('Ada', trim((string) $xpath->evaluate('string(//kundennamen/kunde/@vorname)')));
}
public function testAnonymizeThrowsOnInvalidXml(): void
{
$anonymizer = new BpnXmlAnonymizer();