如何获取simplexml对象的所有元素

bou*_*def 6 php simplexml

好的,我完全被这里难住了.我发现了类似的问题,但答案似乎不适用于我的具体问题.我已经开了好几天了.

我在这里有这个simplexml对象(它实际上比这更长,很多,但是我正在删除所有无关的东西,所以你实际上会看到它):

SimpleXMLElement Object
(
    [SubjectClassification] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Authority] => Category Code
                            [Value] => s
                            [Id] => s
                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Authority] => Subject
                            [Value] => Sports
                            [Id] => 54df6c687df7100483dedf092526b43e
                        )

                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Authority] => Subject
                            [Value] => Professional baseball
                            [Id] => 20dd2c287e4e100488e5d0913b2d075c
                        )

                )

        )

)
Run Code Online (Sandbox Code Playgroud)

我通过对包含以下内容的变量执行print_r来获取此代码块:

$subjects->SubjectClassification->children();
Run Code Online (Sandbox Code Playgroud)

现在,我想了解subjectClassification数组的所有元素.他们都是!但是当我这样做时:

$subjects->SubjectClassification;
Run Code Online (Sandbox Code Playgroud)

或这个:

$subjects->SubjectClassification->children();
Run Code Online (Sandbox Code Playgroud)

或者,如果我尝试通过循环获取所有数组元素,我得到的是:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Authority] => Category Code
            [Value] => s
            [Id] => s
        )

)
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能得到一切?

jir*_*iya 1

您可以使用 xpath 来执行此操作。这是我发现的最简单、最有效的方法,并减少了对大量 for 循环等来解决项目的需要。要获取您想要的所有节点,您可以使用:

如果你的xml是这样的:

<Subjects>
<SubjectClassification>
</SubjectClassification>
<SubjectClassification>
</SubjectClassification>
<SubjectClassification>
</SubjectClassification>
</Subjects>
Run Code Online (Sandbox Code Playgroud)

然后,要获取数组中的所有主题分类,您可以执行以下操作:

$subject_classifications = $xml->xpath("//SubjectClassification");
Run Code Online (Sandbox Code Playgroud)

xml 变量指的是您的主要 simplexml 对象,即您使用 simplexml 加载的文件。

然后您可以使用 foreach 循环遍历数组,如下所示:

foreach($subject_classifications as $subject_classification){
echo (string) $subject_classification->Authority;
echo (string) $subject_classification->Value;
echo (string) $subject_classification->Id;
}
Run Code Online (Sandbox Code Playgroud)

您的结构可能会有所不同,但无论如何您都会明白。您可以在这里看到 IBM 的一篇好文章“Using Xpath With PHP”