PHP에서 XML을 처리하는 일반적인 방법 중 하나는 XML_PARSE_INTO_STRUCT () 함수를 사용하는 것입니다. 이 기능은 XML 문서를 구조화 된 배열로 구문 분석 할 수 있으며, 이는 태그의 계층 적 관계를 포함 할뿐만 아니라 태그 속성, 값 및 유형을 추출합니다. 이 기사에서는이 기능을 통해 속성 정보에서 XML 태그를 구별하고 추출하는 방법을 설명하고 예제와 함께 설명합니다.
int xml_parse_into_struct(
XMLParser $parser,
string $data,
array &$values,
array &$index = null
);
$ parser : XML 파서 리소스.
$ 데이터 : XML 데이터를 구문 분석합니다.
$ 값 : 구조화 된 출력 배열.
$ index : 인덱싱 레이블을위한 선택적 배열.
XML_PARSE_INTO_STRUCT () 의 핵심은 모든 태그, 텍스트 노드, CDATA 및 기타 정보를 순서대로 $ 값 배열에 작성한다는 것입니다. 배열의 각 항목은 연관 배열이며 주요 필드에는 다음이 포함됩니다.
태그 : 태그 이름입니다.
유형 : 노드 유형 (예 : 개방 , 닫기 , 완전 , cdata 등).
값 : 태그에 포함 된 텍스트 값 (있는 경우).
속성 : 태그의 속성은 연관 배열 (속성이있는 경우)으로 존재합니다.
다음 XML이 있다고 가정합니다.
<books>
<book id="1" category="fiction">
<title>Book One</title>
</book>
<book id="2" category="non-fiction">
<title>Book Two</title>
</book>
</books>
구문 분석에는 다음 PHP 코드를 사용할 수 있습니다.
<?php
$xml = <<<XML
<books>
<book id="1" category="fiction">
<title>Book One</title>
</book>
<book id="2" category="non-fiction">
<title>Book Two</title>
</book>
</books>
XML;
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $values, $index);
xml_parser_free($parser);
echo "<pre>";
print_r($values);
echo "
";
?>
구문 분석 후 $ 값 의 내용은 다음과 같습니다.
Array
(
[0] => Array
(
[tag] => BOOKS
[type] => open
)
[1] => Array
(
[tag] => BOOK
[type] => open
[attributes] => Array
(
[ID] => 1
[CATEGORY] => fiction
)
)
[2] => Array
(
[tag] => TITLE
[type] => complete
[value] => Book One
)
[3] => Array
(
[tag] => BOOK
[type] => close
)
[4] => Array
(
[tag] => BOOK
[type] => open
[attributes] => Array
(
[ID] => 2
[CATEGORY] => non-fiction
)
)
[5] => Array
(
[tag] => TITLE
[type] => complete
[value] => Book Two
)
[6] => Array
(
[tag] => BOOK
[type] => close
)
[7] => Array
(
[tag] => BOOKS
[type] => close
)
)
각 책 태그에는 개방형 유형 항목이 있습니다.
속성 정보는 속성 키에 포함되며 연관 배열 형식으로 존재합니다.
텍스트 값 (예 : 책 제목)은 값 키에 존재하며 태그 유형이 완료 됩니다.
태그 이름은 항상 자본화되며 XML_PARSE_INTO_STRUCT () 의 기본 동작입니다.
$ 값 배열을 반복하여 속성으로 모든 태그를 추출 할 수 있습니다. 예를 들어:
foreach ($values as $entry) {
if (isset($entry['attributes'])) {
echo "Tag: {$entry['tag']}\n";
foreach ($entry['attributes'] as $attrName => $attrValue) {
echo " $attrName => $attrValue\n";
}
}
}
태그 이름과 속성 이름은 자동으로 대문자로 변환됩니다.
이 함수는 태그의 계층 구조 정보를 유지하지는 않지만 발생 순서로 만 배열됩니다.
간단한 XML에 적합합니다.보다 복잡한 구조 처리가 필요한 경우 DOM 또는 SimpleXML이 권장됩니다.