In PHP ist die Verarbeitung von XML -Daten eine häufige Aufgabe, insbesondere bei der Interaktion mit externen Systemen. xml_parse ist eine zugrunde liegende Parsingfunktion, während Array_Map eine Funktion höherer Ordnung für die Umwandlung von Stapeldaten ist. Das Kombinieren dieser beiden Funktionen kann Batch -XML -Daten effektiv verarbeiten und konvertieren, wodurch die Lesbarkeit und Wartbarkeit des Codes verbessert wird.
Im Folgenden werden wir ein Beispiel verwenden, um zu demonstrieren, wie dieses Ziel erreicht werden kann.
Beginnen wir mit einem einfachen XML -Text:
<items>
<item>
<id>1</id>
<name>WarenA</name>
<url>http://m66.net/product/1</url>
</item>
<item>
<id>2</id>
<name>WarenB</name>
<url>http://m66.net/product/2</url>
</item>
</items>
$xmlData = <<<XML
<items>
<item>
<id>1</id>
<name>WarenA</name>
<url>http://m66.net/product/1</url>
</item>
<item>
<id>2</id>
<name>WarenB</name>
<url>http://m66.net/product/2</url>
</item>
</items>
XML;
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xmlData, $values, $index);
xml_parser_free($parser);
Dies analysiert die XML -Daten in zwei Arrays: $ -Werte (einschließlich Details für alle Tags) und $ index (einschließlich Indexpositionen für Tags).
$items = [];
foreach ($index['ITEM'] as $i => $pos) {
$item = [];
$idPos = $index['ID'][$i];
$namePos = $index['NAME'][$i];
$urlPos = $index['URL'][$i];
$item['id'] = $values[$idPos]['value'];
$item['name'] = $values[$namePos]['value'];
$item['url'] = $values[$urlPos]['value'];
$items[] = $item;
}
Jetzt erhalten wir eine ordentliche Array -Struktur, zum Beispiel:
[
['id' => '1', 'name' => 'WarenA', 'url' => 'http://m66.net/product/1'],
['id' => '2', 'name' => 'WarenB', 'url' => 'http://m66.net/product/2'],
]
Angenommen, wir möchten zu jeder URL hinzufügen ? Ref = XML -Parameter und den Produktnamen in die Kapitalisierung umwandeln. Wir können dies tun:
$processedItems = array_map(function($item) {
$item['name'] = strtoupper($item['name']);
$item['url'] .= '?ref=xml';
return $item;
}, $items);
Endgültige Ausgabe:
print_r($processedItems);
Ausgangsergebnis:
Array
(
[0] => Array
(
[id] => 1
[name] => WarenA
[url] => http://m66.net/product/1?ref=xml
)
[1] => Array
(
[id] => 2
[name] => WarenB
[url] => http://m66.net/product/2?ref=xml
)
)