当我使用PHP在XML中添加新元素时,如何设置属性。我的PHP代码是这样的:
<?php
$xml = simplexml_load_file ( 'log.xml' );
$movies = $xml->addChild("time");
// add attribut `value` here in tag time
$user = $movies->addChild("user", "");
// add attribut `id` here in tag user
$action = $user->addChild("action","");
// add attribut `value` here in tag action
$action->addChild("table","customers");
$action->addChild("table_id","1");
echo $xml->saveXML( 'log.xml' );
?>
我希望输出看起来像这样:
// log.xml
<?xml version="1.0" encoding="utf-8"?>
<log>
<time value="2013-01-10 12:20:01">
<user id="1">
<action value="delete">
<table>customer</table>
<table_id>1</table_id>
</action>
<action value="insert">
<table>customer</table>
<data>
<nama>budi</nama>
</data>
</action>
<action value="update">
<table>customer</table>
<table_id>1</table_id>
<old_data>
<nama>andi</nama>
</old_data>
<new_data>
<nama>budi</nama>
</new_data>
</action>
</user>
</time>
</log>
请帮助我..我是关于xml的新手
答案 0 :(得分:2)
使用SimpleXMLElement :: addAttribute - 向SimpleXML元素添加属性
编辑:您的用例 -
$action = $user->addChild("action","");
// add attribut `value` here in tag action
$action->addAttribute('value','update'); // add this
$action->addChild("table","customers");
$action->addChild("table_id","1");
最好的例子:
http://php.net/manual/en/simplexmlelement.addattribute.php
<?php
include 'example.php';
$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');
$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');
$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');
echo $sxe->asXML();
?>
对PHP.Net参考页面中的第一个示例的肯定...
答案 1 :(得分:0)
$movies->addAttribute('value','your value here');
$action->addAttribute('value','your value here');
$user->addAttribute('id','your value here');
答案 2 :(得分:0)
花了三个小时把 SimpleXML 和其他解决方案结合起来,终于搞定了。它有效,我希望它会有用。
$xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
$arrXml = [
"categories" => [
'category' => [
'@attributes' => [
'id' => '123',
'parent_id' => '12345'
],
'@value' => 'Bikes'
]
],
"properties" => [
'property' => [
'id' => '123',
'categoryId' => '1',
'name' => 'Color',
'values' => [
'value' => [
"id" => '1',
"name" => 'Black'
],
'value' => [
"id" => '2',
"name" => 'White'
]
]
]
],
"products" => [
'products' => [
'id' => '1231231',
'categoryId' => '123',
'model' => [
'@attributes' => [
'foo' => 'bar',
],
'@value' => 'Avalanche'
],
'article' => '1.0 2011',
'vendor' => 'GT',
]
]
];
array_to_xml($arrXml,$xml_data);
//saving generated xml file;
$result = $xml_data->asXML('test.xml');
// 打印 $xml_data->asXML();
去
<data>
<categories>
<category id="123" parent_id="12345">Bikes</category>
</categories>
<properties>
<property>
<id>123</id>
<categoryId>1</categoryId>
<name>Color</name>
<values>
<value>
<id>2</id>
<name>White</name>
</value>
</values>
</property>
</properties>
<products>
<products>
<id>1231231</id>
<categoryId>123</categoryId>
<category foo="bar">Avalanche</category>
<article>1.0 2011</article>
<vendor>GT</vendor>
</products>
</products>
具有此功能:
function array_to_xml( $data, &$xml_data ) {
foreach( $data as $key => $value ) {
if (!empty($value)) {
if( is_array($value)) {
if (!empty($value["@attributes"])) {
$subnode = $xml_data->addChild($key, $value["@value"]);
foreach ($value["@attributes"] as $key1 => $val1) {
$subnode->addAttribute($key1, $val1);
}
} else if ($key == "@value") {
foreach ($value as $attr => $attrVal) {
$subnode = $xml_data->addChild("$attr", $attrVal);
array_to_xml($attrVal, $subnode);
}
} else {
if (!empty($value)) {
$subnode = $xml_data->addChild($key);
array_to_xml($value, $subnode);
}
}
} else {
$xml_data->addChild("$key",$value);
}
}
}
}