首页 > 解决方案 > 如何使用 CURL 和 DOM 将 xml 文件中的所有元素放入数组中?

问题描述

我需要一些代码方面的帮助。我想使用 CURL 和 DOM 将 xml 文件中的所有元素放入数组中。

你能帮我解决这个问题吗?

我的带有 CURL 代码的 PHP 如下所示:

<?php

$key = 'ad12rqwagst3ewtgsdhdsdsfsdgsd';

$url = 'http://api.11street.my/rest/cateservice/category';

$request_body = 'xml data';

$headers = array(
    'openapikey: ' . $key,
    'Accept-Charset: utf-8',
    'Content-Type: application/xml'
);

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
$arrXml = array();
$dom = new DOMDocument;
$dom->loadXML($result);

foreach ($dom->getElementsByTagName('dispEngNm') as $item) {
    $arrXml[] = $dom->saveXML($item) . "<br>" . "<hr>";
} 

print_r($arrXml);

?>

xml文件的示例代码如下所示,这是我拥有的三个项目:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
</ns2:categorys>
<ns2:category>
    <depth>1</depth>
    <dispEngNm>Women Clothing</dispEngNm>
    <dispNm>Women Clothing</dispNm>
    <dispNo>2021</dispNo>
    <parentDispNo>0</parentDispNo>
</ns2:category>
<ns2:category>
    <depth>2</depth>
    <dispEngNm>Women Tops</dispEngNm>
    <dispNm>Women Tops</dispNm>
    <dispNo>2051</dispNo>
    <parentDispNo>2021</parentDispNo>
</ns2:category>
<ns2:category>
    <depth>3</depth>
    <dispEngNm>Tanks &amp; Camisoles</dispEngNm>
    <dispNm>Tanks &amp; Camisoles</dispNm>
    <dispNo>2209</dispNo>
    <parentDispNo>2051</parentDispNo>
</ns2:category>
</ns2:categorys>

输出如下所示:

Array ( [0] => Women Clothing
[1] => Women Tops
[2] => Tanks & Camisoles
[3] => T-shirts

我只是可以将元素“dispEngNm”放入数组中。任何人都知道如何将其他元素“dispNm”、“dispNo”、“parentDispNo”与“dispEngNm”一起放入数组中?

感谢您的帮助!祝您有一个愉快的一天!

标签: phparraysxmlcurldom

解决方案


只需更改此代码:

foreach ($dom->getElementsByTagName('dispEngNm') as $item) {
    $arrXml[] = $dom->saveXML($item) . "<br>" . "<hr>";
}

通过此代码:

$allTags = $dom->getElementsByTagName('ns2:category');
for ($i =0; $i < $allTags.length; $i++) {
    $childLen = $allTags[i].childNodes.length;
    $innerChilds = $allTags[i].firstChild;
    for ($j = 0; $j < $childLen; $j++) {
        $arrXml[] = $dom->saveXML($innerChilds.innerHTML) . "<br>" . "<hr>"; 
        $innerChilds = $innerChilds.nextSibling;
    }
}

在上面的代码中,我只是加载了所有ns2:category可能工作的子节点。

注意:我没有测试过代码。您可以对此进行测试并根据需要进行更改。


推荐阅读