2015-10-04 61 views
-3

我有对象的数组,每个人只是一个字符串对,像转换对象的数组到XML

$faq[0]->{"question"} = "Here is my question 1"; 
$faq[0]->{"answer"} = "Here is my answer 1"; 
$faq[1]->{"question"} = "Here is my question 2"; 
$faq[1]->{"answer"} = "Here is my answer 2"; 

,我想将其转换成XML,像这样:

<faq> 
    <question>Here is my question 1</question> 
    <answer>Here is my answer 1</answer> 
</faq> 
<faq> 
    <question>Here is my question 2</question> 
    <answer>Here is my answer 2</answer> 
</faq> 

我没有任何问题手动编写一个函数来做到这一点,但它确实感觉应该内置到PHP中,但我无法在任何地方找到它。是否存在某个函数,或者我应该通过编写自己的函数来转换数据?谢谢!

编辑:很多人都建议for循环,并通过数组。这就是我所说的“手动编写函数”的意思。我只是在想,我的情况是通用的是PHP/SimpleXML的可能有一个内置的功能一样

$xml->addContent($faq); 

这将尽一切解析$ FAQ变量,并将其转换为XML。

+0

尝试'SimpleXML' http://php.net/manual/en/book.simplexml.php – blazerunner44

+0

我没有和它说:“类stdClass的客体不能转换为字符串“ –

+0

你可以发布你用于SimpleXML的代码吗? – blazerunner44

回答

1

只需遍历$faq,然后将您的stdClass es转换为数组以添加单个子元素。事情是这样的:

$faqs = []; 

$faqs[0] = new stdClass; 
$faqs[0]->{"question"} = "Here is my question 1"; 
$faqs[0]->{"answer"} = "Here is my answer 1"; 
$faqs[1] = new stdClass; 
$faqs[1]->{"question"} = "Here is my question 2"; 
$faqs[1]->{"answer"} = "Here is my answer 2"; 

$xml = new SimpleXMLElement('<faqs/>'); 
foreach ($faqs as $faq) { 
    $xml_faq = $xml->addChild('faq'); 
    foreach ((array) $faq as $element_name => $element_value) { 
     $xml_faq->addChild($element_name, $element_value); 
    } 
} 

print $xml->asXML(); 

输出:

<?xml version="1.0"?> 
<faqs> 
    <faq> 
     <question>Here is my question 1</question> 
     <answer>Here is my answer 1</answer> 
    </faq> 
    <faq> 
     <question>Here is my question 2</question> 
     <answer>Here is my answer 2</answer> 
    </faq> 
</faqs> 
0

这里是我的答案,但使用数组,而不是类。

演示:http://blazerunner44.me/test/xml.php

<?php 
header("Content-type: text/xml"); 
$faq = array(); 
$faq[0]['question'] = "Here is my question 1"; 
$faq[0]["answer"] = "Here is my answer 1"; 
$faq[1]["question"] = "Here is my question 2"; 
$faq[1]["answer"] = "Here is my answer 2"; 

$response = new SimpleXMLElement('<response></response>'); 

foreach($faq as $block){ 
    $element = $response->addChild('faq'); 
    $element->addChild('question', $block['question']); 
    $element->addChild('answer', $block['answer']); 
} 

echo $response->asXML(); 
?>