PHP에서 XML 데이터 처리는 특히 외부 시스템과 상호 작용할 때 일반적인 작업입니다. XML_PARSE 는 기본 구문 분석 기능이며 Array_Map은 배치 데이터 변환을위한 고차 기능입니다. 이 두 기능을 결합하면 Batch XML 데이터를 효과적으로 처리하고 변환하여 코드의 가독성과 유지 관리를 향상시킬 수 있습니다.
아래에서는이 목표를 달성하는 방법을 보여주기 위해 예제를 사용합니다.
간단한 XML 텍스트로 시작하겠습니다.
<items>
<item>
<id>1</id>
<name>상품A</name>
<url>http://m66.net/product/1</url>
</item>
<item>
<id>2</id>
<name>상품B</name>
<url>http://m66.net/product/2</url>
</item>
</items>
$xmlData = <<<XML
<items>
<item>
<id>1</id>
<name>상품A</name>
<url>http://m66.net/product/1</url>
</item>
<item>
<id>2</id>
<name>상품B</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);
이는 XML 데이터를 두 개의 배열 (모든 태그에 대한 세부 사항 포함)과 $ index (태그의 색인 위치 포함)의 두 배열로 구문 분석합니다.
$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;
}
이제 우리는 깔끔한 배열 구조를 얻습니다.
[
['id' => '1', 'name' => '상품A', 'url' => 'http://m66.net/product/1'],
['id' => '2', 'name' => '상품B', 'url' => 'http://m66.net/product/2'],
]
각 URL에 ? ref = xml 매개 변수를 추가하고 제품 이름을 대문자로 변환한다고 가정하면 다음을 수행 할 수 있습니다.
$processedItems = array_map(function($item) {
$item['name'] = strtoupper($item['name']);
$item['url'] .= '?ref=xml';
return $item;
}, $items);
최종 출력 :
print_r($processedItems);
출력 결과 :
Array
(
[0] => Array
(
[id] => 1
[name] => 상품A
[url] => http://m66.net/product/1?ref=xml
)
[1] => Array
(
[id] => 2
[name] => 상품B
[url] => http://m66.net/product/2?ref=xml
)
)