Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php foreach循环以创建xml字符串_Php_Xml_Foreach - Fatal编程技术网

Php foreach循环以创建xml字符串

Php foreach循环以创建xml字符串,php,xml,foreach,Php,Xml,Foreach,我需要从一个包含数据的数组中创建一个xml提要,因此我使用一个foreach循环来创建它,但是当我打印结果时,唯一打印出来的部分是foreach循环开始之前的部分,我在外部测试了数组,它有数据并且正确地显示了数据 <PriceHeader> <version>1.5.1</version> </PriceHeader>';

我需要从一个包含数据的数组中创建一个xml提要,因此我使用一个foreach循环来创建它,但是当我打印结果时,唯一打印出来的部分是foreach循环开始之前的部分,我在外部测试了数组,它有数据并且正确地显示了数据

<PriceHeader>
                          <version>1.5.1</version>
                        </PriceHeader>';
                        foreach($sorted_data as $data){ 
                        '<Price>
                            <itemIdentifier>
                              <sku>'.$data["SKU"].'</sku>
                            </itemIdentifier>
                            <pricingList>
                                <pricing>
                                    <currentPrice>
                                        <value currency="USD" amount='.$data["Price"].'></value>
                                    </currentPrice>
                                </pricing>
                            </pricingList>
                        </Price>';
                        } 
                        '</PriceFeed>';

1.5.1
';
foreach($data作为$data排序){
'
“.$data[“SKU”]”
';
} 
'';

如果我打印该变量,我得到的唯一输出是1.5.1,但检查chrome中的元素会发现它也创建了html结构,直到循环开始……

我通过使用XMLwriter创建xml字符串修复了它,代码的结尾如下:

$xw = xmlwriter_open_memory();
xmlwriter_set_indent($xw, 1);
$res = xmlwriter_set_indent_string($xw, ' ');

xmlwriter_start_document($w, '1.0', 'UTF-8');

xmlwriter_start_element($xw, 'PriceFeed');
xmlwriter_start_attribute($xw, 'xmlns');
xmlwriter_text($xw, 'http://walmart.com/');
xmlwriter_end_attribute($xw);

xmlwriter_start_element($xw, 'PriceHeader');
xmlwriter_start_element($xw, 'version');
xmlwriter_text($xw, '1.5.1');
xmlwriter_end_element($xw);
xmlwriter_end_element($xw);

foreach($sorted_data as $data){
    xmlwriter_start_element($xw, 'Price');
    xmlwriter_start_element($xw, 'itemIdentifier');
    xmlwriter_start_element($xw, 'sku');
    xmlwriter_text($xw, $data["SKU"]);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
    xmlwriter_start_element($xw, 'pricingList');
    xmlwriter_start_element($xw, 'pricing');
    xmlwriter_start_element($xw, 'currentPrice');
    xmlwriter_start_element($xw, 'value');
    xmlwriter_start_attribute($xw, 'currency');
    xmlwriter_text($xw, 'USD');
    xmlwriter_start_attribute($xw, 'amount');
    xmlwriter_text($xw, $data['Price']);
    xmlwriter_end_attribute($xw);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
    xmlwriter_end_element($xw);
}

xmlwriter_end_document($xw);

echo xmlwriter_output_memory($xw);

您可以在PHP中使用
simplexmlement
。有关更多信息,您可以访问

此外,如果希望在浏览器中查看XML,可以使用echo的
htmlspecialchars
函数

我试着改变你的代码作为例子

我希望这对你有帮助

有一个很好的编码:)

asXML();
回声“;
echo htmlspecialchars($output);
回声“;
?>

当你拥有像
''这样的东西时,你期待什么?我还建议您使用SimpleXML之类的东西来创建内容,而不是构建字符串。你需要打开一个命令。所以可能是一个回音输出那个字符串。你能提供一个例子吗?很好,比我的好,因为它被沃尔玛订阅源接受了,尽管我不明白$string的意思,这是用于连接的吗?谢谢。是的,它意味着串接。比如:$str1=“bla1”$str2=“bla2”$str=$str1.$str2[bla1bla2]为什么要在将XML创建为文本后解析和序列化XML?这是一个不必要的步骤,不会改变任何事情。
<?php
$string = "";
$string .="<PriceFeed>
<PriceHeader>
                          <version>1.5.1</version>
                        </PriceHeader>";
                        foreach($sorted_data as $data){

                        $string.= "<Price>
                            <itemIdentifier>
                              <sku>".$data["SKU"]."</sku>
                            </itemIdentifier>
                            <pricingList>
                                <pricing>
                                    <currentPrice>
                                        <value currency=\"USD\" amount=\"".$data["Price"]."\"></value>
                                    </currentPrice>
                                </pricing>
                            </pricingList>
                        </Price>";
                        }
                        $string.= "</PriceFeed>";



$xml = new SimpleXMLElement($string);
$output = $xml->asXML();

echo "<pre>";
echo htmlspecialchars($output);
echo "</pre>";
?>