我已经在stackoverflow中阅读了其中一个问题,其中一个用户与@Mifas和@Abhishek Madhani分享了这个link,这是有效的。
现在,我想像这样格式化xml输出:
<Form xmlns="url" label="Home Visit Form" type="TextView" name="FormName">
<Field name="Category" label="FormType" value="Form1" type="TextView"/>
<Field type="Delimiter"/>
<Field name="ContractNumber" label="Contract number" value="3300000011" type="TextView"/>
<Field type="Delimiter"/>
<Field name="ClientName" label="Name of Client" value="Neplatic Neplaticovic" type="TextView"/>
<Field name="BirthDate" label="Birthday" value="1980-07-04" type="TextView"/>
<Field name="DueDate" label="Due Date" value="2014-07-24" type="TextView"/>
</Form>
但我不知道如何。
PHP:
header('Content-Type: text/xml');
$Form= array(
0 => array(
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'xsi:noNamespaceSchemaLocation' => 'http://homecredit.net/muchserver/ws/visit/types',
'label'=> 'Home Visit Form',
'type' => 'TextView',
'name' => 'HomeVisitForm'
),
1 => array(
'id' => '002',
'name' => 'Ijas',
'subjects' => array('Science','History','Social')
)
);
// creating object of SimpleXMLElement
$xml_Form = new SimpleXMLElement("<?xml version=\"1.0\"?><Form></Form>");
array_to_xml($Form,$xml_Form); // function call to convert array to xml
print $xml_Form->asXML(); //saving generated xml file
// function defination to convert array to xml
function array_to_xml($Form, &$xml_Form) {
foreach($Form as $key => $value) {
$key = is_numeric($key) ? "Field$key" : $key;
(is_array($value))
? array_to_xml($value, $xml_Form->addChild("$key"))
: $xml_Form->addChild("$key","$value");
}
}
?>
上面的PHP代码输出:
<Form>
<Field0>
<xsi>http://www.w3.org/2001/XMLSchema-instance</xsi>
<noNamespaceSchemaLocation>url</noNamespaceSchemaLocation>
<label>Home Visit Form</label>
<type>TextView</type>
<name>HomeVisitForm</name>
</Field0>
<Field1>
<id>002</id>
<name>Ijas</name>
<subjects>
<Field0>Science</Field0>
<Field1>History</Field1>
<Field2>Social</Field2>
</subjects>
</Field1>
</Form>
答案 0 :(得分:0)
您好,您可能想查看此位
(is_array($value))
? array_to_xml($value, $xml_Form->addChild("$key"))
: $xml_Form->addChild("$key","$value");
这可能是正确的,但它的编写方式并不清楚。通常,人们会分配值等。
$var = (is_array($value))
? array_to_xml($value, $xml_Form->addChild("$key"))
: $xml_Form->addChild("$key","$value");
或者
if(is_array($value)){
array_to_xml($value, $xml_Form->addChild("$key")); //recursive
}else{
$xml_Form->addChild("$key","$value");
}
它可能对你没有帮助,但对我来说只是看起来很糟糕。此外,但更重要的是,您尝试设置属性name="DueDate"
。但是,我在代码中的任何位置都没有看到$xml_Form->addAttribute()
的来电。
http://php.net/manual/en/simplexmlelement.addattribute.php
可能你需要这样的东西,但我现在无法测试。
foreach($Form as $key => $value) {
$key = is_numeric($key) ? "Field$key" : $key;
//....
将上述内容更改为此类内容。
$child = $xml_Form->addChild("Field");
foreach($Form as $key => $value) {
$child->addAttribute($key, $value);
}
可能需要做一些工作来弄清楚如何处理这部分
'subjects' => array('Science','History','Social')