PHP使用XmlExtractor将XML解析为数组 - Bug

时间:2017-01-07 22:25:49

标签: php xml parsing xml-parsing html-parsing

我正在使用XmlExtractor将XML文件解析为PHP中的数组。

不幸的是,重复数组元素存在一个错误。这是输入Earth.xml的示例:

<earth>
    <people>
        <person>
            <name id = "1">
                <first>Paul</first>
                <last>Warelis</last>
            </name>
            <name id = "2">
                <first>George</first>
                <last>Stein</last>
            </name>
            <gender>Male</gender>
            <skill>Javascript</skill>
            <skill>PHP</skill>
            <skill>Beer</skill>
        </person>
    </people>
</earth>

有两个名称元素(一个用&#34; id = 1&#39;&#34;另一个用&#34; id = 2&#34;)。我想将整个XML转换为数组。这是代码:

$source = new XmlExtractor("earth", $file);
      foreach ($source as $people) {
         $result = $people->export(true);
      }

      echo '<pre>';
      print_r($result);
      echo '</pre>';

但是,在这种情况下,XmlExtractor会将name元素改为&#34; id = 2&#34;成为名字元素的子元素。这是输出:

Array
(
    [people] => Array
        (
            [person] => Array
                (
                    [name] => Array
                        (
                            [id] => 1
                            [first] => Paul
                            [last] => Warelis
                            [name] => Array
                                (
                                    [id] => 2
                                    [first] => George
                                    [last] => Stein
                                )

                        )

                    [gender] => Male
                    [skill] => Array
                        (
                            [0] => Javascript
                            [1] => PHP
                            [2] => Beer
                        )

                )

        )

)

XmlExtractor的作者向我确认这是一个错误。然而,遗憾的是该项目已不再维护,到目前为止我自己无法解决问题。有人能够调查这个并找出问题的根源吗?

作者已经确认他会将解决方案合并到包中,以便其他人也可以受益。

谢谢! pancid

1 个答案:

答案 0 :(得分:0)

为什么一个人有两个名字和姓氏?对于另一个人,您可以在XML文件中添加另一个“person”标记,如下所示:

<earth>
    <people>
        <person>
            <name id = "1">
                <first>Paul</first>
                <last>Warelis</last>
            </name>
            <gender>Male</gender>
            <skill>Javascript</skill>
            <skill>PHP</skill>
            <skill>Beer</skill>
        </person>
        <person>
            <name id = "2">
                <first>George</first>
                <last>Stein</last>
            </name>
            <gender>Male</gender>
            <skill>AngularJS</skill>
            <skill>PHP</skill>
            <skill>Beer</skill>
        </person>
    </people>
</earth>