foreach循环创建xml字符串

时间:2019-09-12 17:04:48

标签: php xml foreach

我需要从带有数据的数组创建xml提要,所以我使用了一个foreach循环来创建它,但是当我print_r结果时,唯一打印出的部分是在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>';

如果我print_r那个var,我唯一的输出是1.5.1,但是检查chrome中的元素显示我也创建了html结构,直到循环开始。 / p>

2 个答案:

答案 0 :(得分:1)

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

此外,如果要在浏览器中查看XML,可以将htmlspecialchars函数与echo一起使用。

我尝试更改您的代码为例。

希望对您有帮助。

编码不错:)

<?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>";
?>

答案 1 :(得分:0)

我通过使用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);