【问题标题】:foreach loop to create a xml stringforeach 循环创建一个 xml 字符串
【发布时间】:2020-01-14 14:45:04
【问题描述】:

我需要从带有数据的数组创建一个 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 结构,直到循环开始....

【问题讨论】:

  • 当您拥有'&lt;/PriceFeed&gt;'; 之类的东西时,您会期待什么?我还建议使用 SimpleXML 之类的东西创建内容,而不是构建字符串。
  • 您不能简单地将字符串包含在循环中。你需要一个命令。所以也许是一个输出该字符串的回声推荐。
  • 你能举个例子吗?

标签: php xml foreach


【解决方案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>";
?>

【讨论】:

  • 完美,比我的效果更好,因为它被 walmart feed 接受了,虽然我不明白 $string .= 是什么意思,是为了连接吗?
  • 谢谢。是的,这意味着字符串的连接。像这样: $str1 = "bla1" $str2 = "bla2" $str = $str1.$str2 [bla1bla2]
  • 为什么在将 XML 创建为文本后解析和序列化 XML?这是一个不必要的步骤,不会改变任何事情。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多