PHP XML解析器函数

PHP xml_parse_into_struct() 函数将 XML 数据解析为数组结构。它将 XML 字符串解析为 2 个并行的数组结构:

  • 值数组 - 包含解析后的 XML 中的数据
  • 索引数组 - 包含指向值位置的指针值数组

此函数的最后两个参数必须通过引用传递。

语法

xml_parse_into_struct(parser, data, values, index) 

参数

parser必需。 指定要使用的 XML 解析器的引用。
data必需。 指定包含要解析的 XML 数据的字符串。
values必需。 指定包含 XML 数据值的数组。
index可选。 指定一个数组,其中包含指向中适当值的位置的指针。

返回值

成功时返回 1,失败时返回 0。这与 false 和 true 不同。

示例:xml_parse_into_struct() 示例

该示例显示 xml_parse_into_struct 函数的用法。

<?php
//创建XML解析器
$parser = xml_parser_create();

//要解析的简单XML数据
$xmldata = "<p><note>Hello World!</note></p>";

//将XML数据解析成数组
xml_parse_into_struct($parser, $xmldata, $vals, $index);

//免费的XML解析器
xml_parser_free($parser);

echo "Index array\n";
print_r($index);
echo "\nVals array\n";
print_r($vals);
?> 

上述代码的输出将是:

Index array
Array
(
    [P] => Array
        (
            [0] => 0
            [1] => 2
        )

    [NOTE] => Array
        (
            [0] => 1
        )

)

Vals array
Array
(
    [0] => Array
        (
            [tag] => P
            [type] => open
            [level] => 1
        )

    [1] => Array
        (
            [tag] => NOTE
            [type] => complete
            [level] => 2
            [value] => Hello World!
        )

    [2] => Array
        (
            [tag] => P
            [type] => close
            [level] => 1
        )

) 

示例:解析 XML 文件

假设我们有一个名为test.xml。该文件包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<userlist>
  <user>
    <username>John123</username>
    <name>John Smith</name>
    <phone>+1-8054098000</phone>
    <address>Brooklyn, New York, USA</address>
  </user>
</userlist> 

在下面的示例中,创建了一个 XML 解析器。然后使用xml_parse_into_struct()函数解析该XML文件的数据。

<?php
//创建XML解析器
$parser=xml_parser_create();

//打开xml文件
$fp = fopen("test.xml", "r");

//要解析的XML数据
$xmldata = fread($fp,4096);

//将XML数据解析成数组
xml_parse_into_struct($parser, $xmldata, $vals, $index);

//免费的XML解析器
xml_parser_free($parser);

fclose($fp);

echo "Vals array\n";
print_r($vals);
?> 

上述代码的输出将是:

Vals array
Array
(
    [0] => Array
        (
            [tag] => USERLIST
            [type] => open
            [level] => 1
            [value] => 
  
        )

    [1] => Array
        (
            [tag] => USER
            [type] => open
            [level] => 2
            [value] => 
    
        )

    [2] => Array
        (
            [tag] => USERNAME
            [type] => complete
            [level] => 3
            [value] => John123
        )

    [3] => Array
        (
            [tag] => USER
            [value] => 
    
            [type] => cdata
            [level] => 2
        )

    [4] => Array
        (
            [tag] => NAME
            [type] => complete
            [level] => 3
            [value] => John Smith
        )

    [5] => Array
        (
            [tag] => USER
            [value] => 
    
            [type] => cdata
            [level] => 2
        )

    [6] => Array
        (
            [tag] => PHONE
            [type] => complete
            [level] => 3
            [value] => +1-8054098000
        )

    [7] => Array
        (
            [tag] => USER
            [value] => 
    
            [type] => cdata
            [level] => 2
        )

    [8] => Array
        (
            [tag] => ADDRESS
            [type] => complete
            [level] => 3
            [value] => Brooklyn, New York, USA
        )

    [9] => Array
        (
            [tag] => USER
            [value] => 
  
            [type] => cdata
            [level] => 2
        )

    [10] => Array
        (
            [tag] => USER
            [type] => close
            [level] => 2
        )

    [11] => Array
        (
            [tag] => USERLIST
            [value] => 

            [type] => cdata
            [level] => 1
        )

    [12] => Array
        (
            [tag] => USERLIST
            [type] => close
            [level] => 1
        )

)