xml子级中的图像名称不止一个,并且受到php的限制
我有xml另一个数组,我有它,但第一个不能,我怎么能解决这个问题 像这样的Xml结构,并得到一个错误代码,在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/
“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>
- 如果你想有3个图像,这部分