【问题标题】:PHP Parsing XML to Array using XmlExtractor - BugPHP 使用 XmlExtractor 将 XML 解析为数组 - 错误
【发布时间】:2017-01-07 22:25:49
【问题描述】:

我正在使用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>

有两个名称元素(一个带有“id = 1'”,另一个带有“id =2”)。我想把整个 XML 变成一个数组。这是代码:

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

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

但是,在这种情况下,XmlExtractor 会将“id = 2”的名称元素转换为第一个名称元素的子元素。这是输出:

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 的作者已向我确认这是一个错误。但是,不幸的是,该项目不再维护,到目前为止我还无法自己解决问题。任何人都能够对此进行调查并确定问题的根源吗?

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

谢谢! 潘西迪

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 逻辑上,你是对的。但是,提供的 xml 只是一个示例,用于说明代码中的错误。元素的名称是什么并不重要,问题总是一样的。解决这个问题的唯一方法是修复github.com/pwarelis/XmlExtractor/tree/master/src上的XmlExtractor源代码
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多