亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

xml 子級中的圖像名稱超過一個并受到 php 的限制

xml 子級中的圖像名稱超過一個并受到 php 的限制

PHP
瀟湘沐 2023-08-11 15:56:22
我有 xml,另一個數組我得到了,但第一個數組不能我該如何解決這個問題像這樣的xml結構并在xml到php中獲取錯誤代碼第一個不是數組第二個是數組我無法獲得第一張圖片,孩子們"sitename/11.jpg"像這樣的xml [images] => SimpleXMLElement Object ( [image] => Array ( [0] => sitename/15.jpg [1] => sitename/16.jpg [2] => sitename/17.jpg [3] => sitename/18.jpg ) ) ) [images] => SimpleXMLElement Object ( [image] => sitename/11.jpg ))<root><result><node><categories>somecategory<categories/><images><image>sitename/15.jpg</image><image>sitename/16.jpg</image><image>sitename/17.jpg</image><image>sitename/18.jpg</image></images></node><node><categories>somecategory<categories/><images><image>sitename/11.jpg</image></images></node>  </result>      </root>function solve_something($xml, $destination){    $xml = simplexml_load_file($xml, "SimpleXMLElement", LIBXML_NOCDATA);    $json = json_encode($xml);    $items = json_decode($json, TRUE);    $products = array();    $product_data = array();    $row = 1;foreach ($items['result']['node'] as $item) {    $product_data['Categories'] = 'categories';    if (isset($item['images']['image'])) {        if (is_array($item['images']['image'])) {            foreach ($item['images']['image'] as $key => $image) {                $key++;                if ($key <= 4) {                    $image_name = 'image' . $key;                    $product_data[$image_name] = isset($image) ? $image : null;                }            }        } else {            $product_data['image'] = isset($image) ? $image : null;        }    }$path = createXML($products, $destination);return $path;}
查看完整描述

1 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

代碼有幾個問題

  • 如果你想要3張圖片,這部分if ($key <= 4) {應該小于或等于2。

  • save當您編寫文件時,函數返回時,您實際上不必返回任何內容(或者您想檢查是否為 false)the number of bytes written or false if an error occurred.

  • 在 foreach 中像這樣使用$key++;也可以使用 for 循環來完成,您可以在$i其中附加image

  • 不知道你為什么要使用,createCDATASection但我已經保留了該部分以獲得所需的結果

  • 由于 的多個部分node,您可以$product_data在每次迭代中使用一個數組來將值添加到 foreach 添加到數組中以及之后添加$product_data$products數組中,以防止覆蓋每個循環的值。

更新后的代碼可能看起來像

function solve_something($xml, $destination)

{

    $xml = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);

    $json = json_encode($xml);

    $items = json_decode($json, TRUE);

    $products = array();


    foreach ($items['result']['node'] as $item) {

        $product_data = array();

        $category = $item["categories"];

        $product_data["categories"] = $category;

        if (isset($item['images']['image'])) {

            if (is_array($item['images']['image'])) {

                for ($i = 0; $i < count($item['images']['image']); $i++) {

                    if ($i < 3) $product_data["image" . ($i + 1)] = $item['images']['image'][$i];

                }

            } else $product_data["image1"] = $item['images']['image'];

        }

        $products[] = $product_data;

    }

    createXML($products, $destination);

}


function createXML($data, $destination)

{

    $xmlDoc = new DOMDocument('1.0', 'UTF-8');

    $root = $xmlDoc->appendChild($xmlDoc->createElement("root"));


    foreach ($data as $key => $product) {

        $productA = $root->appendChild($xmlDoc->createElement('product'));

        $imagesElm = $xmlDoc->createElement('images');

        foreach ($product as $key1 => $val) {

            if ($key1 == 'price' || $key1 == 'tax' || $key1 == 'stockAmount' || $key1 === "categories") {

                $productA->appendChild($xmlDoc->createElement($key1, $val));

            } elseif (substr($key1, 0, 5) === "image") {

                $imagesElm->appendChild($xmlDoc->createElement($key1, $val));

            }

        }

        $productA->appendChild($imagesElm);

    }


    $xmlDoc->formatOutput = true;

    $xmlDoc->save($destination);

}


$xml = <<<XML

<?xml version="1.0" encoding="utf-8"?>

<root>

    <result>

        <node>

            <categories>somecategory</categories>

            <images>

                <image>sitename/15.jpg</image>

                <image>sitename/16.jpg</image>

                <image>sitename/17.jpg</image>

                <image>sitename/18.jpg</image>

            </images>

        </node>

        <node>

            <categories>somecategory</categories>

            <images>

                <image>sitename/11.jpg</image>

            </images>

        </node>

    </result>

</root>

XML;


solve_something($xml, "result.xml");

xmlresult.xml看起來像


<?xml version="1.0" encoding="UTF-8"?>

<root>

  <product>

    <categories>somecategory</categories>

    <images>

      <image1>sitename/15.jpg</image1>

      <image2>sitename/16.jpg</image2>

      <image3>sitename/17.jpg</image3>

    </images>

  </product>

  <product>

    <categories>somecategory</categories>

    <images>

      <image1>sitename/11.jpg</image1>

    </images>

  </product>

</root>


查看完整回答
反對 回復 2023-08-11
  • 1 回答
  • 0 關注
  • 112 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號