xml子级中的图像名称不止一个,并且受到php的限制

xml子级中的图像名称不止一个,并且受到php的限制,php,xml,foreach,simplexml,Php,Xml,Foreach,Simplexml,我有xml另一个数组,我有它,但第一个不能,我怎么能解决这个问题 像这样的Xml结构,并得到一个错误代码,在Xml到php的第一个不是数组,第二个是数组 我无法获得第一个图像子项“sitename/11.jpg” 像这样的Xml [images] => SimpleXMLElement Object ( [image] => Array ( [0] => sitename/15.jpg [1] => sitename/16.jpg [2] => sitename/

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

某类
sitename/15.jpgsitename/16.jpgsitename/17.jpgsitename/18.jpg
某类
sitename/11.jpg
函数解决某物($xml,$destination)
{
$xml=simplexml\u load\u文件($xml,“simplexmlement”,LIBXML\u NOCDATA);
$json=json_encode($xml);
$items=json_decode($json,TRUE);
$products=array();
$product_data=array();
$row=1;
foreach($items['result']['node']作为$item){
$product_数据['Categories']='Categories';
如果(isset($item['images']['images'])){
if(是_数组($item['images']['image'])){
foreach($key=>$image的项目['images']['image']as$key){
$key++;
if($key-appendChild($xmlDoc->createElement(“根”));
foreach($key=>$product形式的数据){
$productA=$root->appendChild($xmlDoc->createElement('product');
foreach($key1=>$val的产品){
如果(!空($val)){
如果($key1=='price'| |$key1=='tax'| |$key1=='stockAmount'){
$productA->appendChild($xmlDoc->createElement($key1,$val));
}否则{
$ProductKey=$productA->appendChild($xmlDoc->createElement($key1));
$ProductKey->appendChild($xmlDoc->createCDATASection($val));
}
}
}
}
$xmlDoc->formatOutput=true;
fn_rm(目的地);
$xmlDoc->save($destination);
返回$destination;
}
代码创建

<root>
  <product>
<categories>somecategory<categories/>
<images>
<image1>sitename/15.jpg
<image2>sitename/16.jpg
<image3>sitename/17.jpg
</images>
  </product>
  <product>
<categories>somecategory<categories/>
<images>
<image1>sitename/15.jpg
<image2>sitename/16.jpg
<image3>sitename/17.jpg
<image4>sitename/18.jpg
</images>
  </product>
</root>

某类
sitename/15.jpg
sitename/16.jpg
sitename/17.jpg
某类
sitename/15.jpg
sitename/16.jpg
sitename/17.jpg
sitename/18.jpg
但是我想要

<root>
  <product>
<categories>somecategory<categories/>
<images>
<image1>sitename/15.jpg
<image2>sitename/16.jpg
<image3>sitename/17.jpg
</images>
  </product>
  <product>
<categories>somecategory<categories/>
<images>
<image1>sitename/11.jpg
</images>
  </product>
</root>

某类
sitename/15.jpg
sitename/16.jpg
sitename/17.jpg
某类
sitename/11.jpg

该代码存在一些问题


  • 如果你想要3张图片,这部分代码有一些问题


    • 如果你想有3个图像,这部分
      If($key)xml没有唯一的图像子对象,这就是我使用此代码的原因。但是代码不起作用,我只更改了solve\u something函数。静止图像看起来像第一个:(代码适用于示例数据。您是否使用了完整的代码?我不使用createxml函数,只针对此xml。因此,我们可以解决不同的情况吗?@crazyshark您不必将所有语句拉入createxml函数。您可以通过在另一个函数中使用代码来构建xml来重用该机制。如果我使用您的代码g这是在xml描述等中。无法创建。xml没有唯一的图像子对象,所以我使用此代码。但代码不起作用,我只更改了solve_something函数。静态图像看起来像第一个:(代码适用于示例数据。您是否使用了完整的代码?我不使用createxml函数,只针对此xml。因此,我们可以解决不同的情况吗?@crazyshark您不必将所有语句拉入createxml函数。您可以通过在另一个函数中使用代码来构建xml来重用该机制。如果我使用您的代码g无法在xml描述等中创建此项。
      
      <root>
        <product>
      <categories>somecategory<categories/>
      <images>
      <image1>sitename/15.jpg
      <image2>sitename/16.jpg
      <image3>sitename/17.jpg
      </images>
        </product>
        <product>
      <categories>somecategory<categories/>
      <images>
      <image1>sitename/15.jpg
      <image2>sitename/16.jpg
      <image3>sitename/17.jpg
      <image4>sitename/18.jpg
      </images>
        </product>
      </root>
      
      <root>
        <product>
      <categories>somecategory<categories/>
      <images>
      <image1>sitename/15.jpg
      <image2>sitename/16.jpg
      <image3>sitename/17.jpg
      </images>
        </product>
        <product>
      <categories>somecategory<categories/>
      <images>
      <image1>sitename/11.jpg
      </images>
        </product>
      </root>
      
      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");
      
      <?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>