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

PHP使用XmlExtractor将XML解析为数组-Bug,php,xml,parsing,xml-parsing,html-parsing,Php,Xml,Parsing,Xml Parsing,Html Parsing,我使用PHP将XML文件解析为数组 不幸的是,当涉及到重复的数组元素时,有一个bug。下面是输入Earth.xml的示例: <earth> <people> <person> <name id = "1"> <first>Paul</first> <last>Warelis</last>

我使用PHP将XML文件解析为数组

不幸的是,当涉及到重复的数组元素时,有一个bug。下面是输入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>
XmlExtractor的作者向我确认这是一个bug。然而,不幸的是,该项目已不再维持,我还没有能够解决这个问题,我自己到目前为止。是否有人能够对此进行调查并找出问题的根源

作者已确认他将把解决方案合并到包中,以便其他人也能从中受益

谢谢!
pancid

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


保罗
瓦雷利斯
男性的
Javascript
PHP
啤酒
乔治
斯坦
男性的
安格拉斯
PHP
啤酒

从逻辑上讲,你是对的。然而,所提供的xml只是一个示例来说明代码中的错误。不管元素的名称是什么,问题总是一样的。解决这个问题的唯一方法是将XmlExtractor的源代码固定在
$source = new XmlExtractor("earth", $file);
      foreach ($source as $people) {
         $result = $people->export(true);
      }

      echo '<pre>';
      print_r($result);
      echo '</pre>';
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
                        )

                )

        )

)
<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>