PHP写入XML文件

时间:2014-06-15 09:13:39

标签: php xml

我在将特定字符串写入XML文件时遇到问题。

XML结构是这样的:

<ePrekrsaji>
<time>
<shift hours="48"/>
</time>
</ePrekrsaji>

我使用的代码似乎不起作用:

$my_file = "hours.xml";

$hours = 5

$xml = new DOMDocument();
$xml->load($my_file);
$xml_hours = $xml->createElement($hours);
$nodes = $xml->getElementsByTagName('shift ') ;
if ($nodes->length > 0) {
   $xml->appendChild( $xml_hours );
}
$xml->save($my_file);

我得到的错误 致命错误:/var/www/WebDiP/2013_projekti/WebDiP2013_031/skripte/vrijeme.php:17中未捕获的异常'DOMException'消息'无效字符错误'堆栈跟踪:#0 / var / www / WebDiP / 2013_projekti / WebDiP2013_031 / skripte / vrijeme.php(17):第17行的/var/www/WebDiP/2013_projekti/WebDiP2013_031/skripte/vrijeme.php中引发的DOMDocument-&gt; createElement('')#1 {main}

如何写入此特定节点?

我希望最终结果是:

<ePrekrsaji>
    <time>
    <shift hours="5"/>
    </time>
</ePrekrsaji>

3 个答案:

答案 0 :(得分:0)

你试图创建一个元素<5 />,你确定它是正确的元素名称吗?

我想你想做圣诞老人。像这样:

$xml_hours = $xml->createElement('hours', $hours);

答案 1 :(得分:0)

我发布了一个SimpleXML类的解决方案,因此我们使用file_get_contents从文件中获取数据,然后我们编辑hours元素的属性shift,然后我们保存内容为file_put_contents

$file = "hours.xml";
$xml_data = file_get_contents($file);
$xml = new SimpleXMLElement($xml_data);
$xml->time->shift->attributes()->hours = 5;
file_put_contents($file, $xml->asXML());

答案 2 :(得分:0)

这是您的代码的更正版本。 您只需要获取第一个shift元素,然后设置它的属性。

$file = "hours.xml"; 
$hours = 6;

$xml = new DOMDocument();
$xml->load($file);

// get list of all shift elements
$nodes = $xml->getElementsByTagName('shift');
// get first shift element
$xmlShift = $nodes->item(0);
// set attribute "hours"
$xmlShift->setAttribute("hours", $hours);

$xml->save($file);