我在将特定字符串写入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>
答案 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);