【问题标题】:PHP Array to XMLPHP 数组到 XML
【发布时间】:2016-12-23 00:10:19
【问题描述】:

我使用 CSV 文件中的 fgetcsv 创建了一个多维数组。

同时使用 DOMDocument 和 SimpleXML 我正在尝试创建 CSV 文档的 XML 文件。

数组和 XML 变量被传递给同一个类文件中的函数。 XML 文档的创建没有任何问题,但没有值从数组传递到 XML。它确实有效,我使用静态值而不是从数组中传递值,如果我 print_r 数组,结构和值都是正确的。

在将值传递到 XML 之前,我已经尝试过 'htmlspecialcharacters' 和 'encode_UTF8'。

代码示例如下,product是多维数组。

public function array_to_xml($product, &$xml) 
{

    foreach($product as $row)
    {       
        $element = $xml->createElement("Product");
        $xml->appendChild($element); 

        $element = $xml->createElement("ID", ($row[38]));
        $xml->appendChild($element); 
     }
 }

问题显然出在数组上,但我找不到答案。任何帮助将不胜感激。

输出当前看起来像(ID 元素中没有值)。一旦它工作,产品将有大约 20 个子元素。

<?xml version="1.0"?>
    <ProductList/>
        <Product>
            <ID/>
        </Product>
    </ProductList>

打印到屏幕时的 $row 示例:

Array ( [0] => [1] => [2] => 6/10/2016 [3] => [4] => [5] => 7.35 [6] => N [7] => N [8] => N [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 80 [15] => 0 [16] => 80 [17] => 0 [18] => 80 [19] => N [20] => N [21] => N [22] => N [23] => 236.50 [24] => 0.00 [25] => 4.86 [26] => AFG Home Loans - Alpha [27] => 100% Offset Lo Doc Fixed [28] => 100% Offset Lo Doc 4 Year Fixed Owner Occupied [29] => 250.00 [30] => [31] => 7.35 [32] => 0.00 [33] => 4.9 [34] => N [35] => 325.00 [36] => 48 [37] => 4.52 [38] => 1-1MX78TF [39] => N [40] => [41] => [42] => N [43] => N [44] => [45] => Y [46] => 0.00 [47] => 10,000.00 [48] => 2,000,000.00 [49] => Y [50] => 30 [51] => [52] => [53] => Y [54] => 0.00 ) 

【问题讨论】:

  • 您希望生成的 XML 是什么样的?您没有在 Product 元素中添加任何内容。
  • 你不需要使用htmlspecialchars,库会在必要时为你进行编码。
  • 你确定ID应该是一个单独的元素,而不是Product的属性,比如&lt;Product ID="100"&gt;

标签: php xml csv multidimensional-array fgetcsv


【解决方案1】:

有几件事很突出。首先,你在这一行有一个语法错误:

$element = $xml-&gt;createElement("ID", ($row[38]));(请注意 $row[38] 周围的错误括号。createElement 方法将字符串作为其第二个参数。

其次,您不是将 ID 添加到产品,而是添加到根 XML。解决这个问题,你的代码应该看起来更接近这个。

public function array_to_xml($product, &$xml) 
{
    foreach ($product as $row)
    {       
        $product= $xml->createElement("Product");
        $id = $xml->createElement("ID", $row[38]);

        $product->appendChild($id); 
        $xml->appendChild($product); 
     }
 }

如果您需要它作为@Barmar 评论的属性,您将使用DOMElement->setAttribute() 方法,它看起来像:

public function array_to_xml($product, &$xml) 
{
    foreach ($product as $row)
    {       
        $product= $xml->createElement("Product");
        $product->setAttribute('ID', $row[38]); 

        $xml->appendChild($product); 
     }
 }

【讨论】:

  • 感谢 Derek 的评论,但它不会改变值。在这种情况下,属性“id”仍然为空。虽然我知道该数组包含一个值,但我可以使用 print_r 进行检查。数组示例如下:
猜你喜欢
  • 2012-08-22
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2012-03-21
相关资源
最近更新 更多