函数名称:xml_parse_into_struct()
函数描述:xml_parse_into_struct() 函数解析 XML 数据,并将其存储在一个数组中,该数组包含了 XML 数据的结构信息。
适用版本:所有 PHP 版本(无需安装额外扩展)
语法:int xml_parse_into_struct ( resource $parser , string $data , array &$values [, array &$index ] )
参数:
- parser:XML 解析器资源,通过 xml_parser_create() 函数创建。
- data:待解析的 XML 数据。
- values:存储解析结果的数组。
- index(可选):存储元素索引的数组。
返回值:返回解析的元素数量,如果解析失败则返回 0。
示例:
<?php
// 创建 XML 解析器
$parser = xml_parser_create();
// 定义存储解析结果的数组
$values = array();
$index = array();
// 定义待解析的 XML 数据
$xmlData = '
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
';
// 设置解析器的处理函数
xml_set_element_handler($parser, "startElement", "endElement");
// 设置解析器的字符数据处理函数
xml_set_character_data_handler($parser, "characterData");
// 解析 XML 数据
xml_parse_into_struct($parser, $xmlData, $values, $index);
// 打印解析结果
print_r($values);
// 释放 XML 解析器资源
xml_parser_free($parser);
// 解析开始标签时的处理函数
function startElement($parser, $name, $attrs) {
echo "Start tag: $name\n";
}
// 解析结束标签时的处理函数
function endElement($parser, $name) {
echo "End tag: $name\n";
}
// 解析字符数据时的处理函数
function characterData($parser, $data) {
echo "Character data: $data\n";
}
?>
输出结果:
Array
(
[0] => Array
(
[tag] => BOOKSTORE
[type] => open
[level] => 1
[attributes] => Array
(
)
)
[1] => Array
(
[tag] => BOOK
[type] => open
[level] => 2
[attributes] => Array
(
[CATEGORY] => cooking
)
)
[2] => Array
(
[tag] => TITLE
[type] => open
[level] => 3
[attributes] => Array
(
[LANG] => en
)
)
...
)
以上示例演示了如何使用 xml_parse_into_struct() 函数解析 XML 数据,并将解析结果存储在一个数组中。在示例中,首先创建了一个 XML 解析器,然后定义了解析器的处理函数,包括开始标签、结束标签和字符数据的处理函数。接着,使用 xml_parse_into_struct() 函数解析了一个包含书籍信息的 XML 数据,并将解析结果存储在 $values 数组中。最后,打印了解析结果。