属性为的XML更改值

时间:2015-06-28 14:51:44

标签: php xml attributes

使用PHP我想更改属性是我指定的节点中的值。 XML文件:



<?xml version='1.0' standalone='yes'?>
<days>
<Maandag	id="1">0</Maandag>
<Dinsdag 	id="2">0</Dinsdag>
<Woensdag	id="3">0</Woensdag>
<Donderdag 	id="4">0</Donderdag>
<Vrijdag 	id="5">0</Vrijdag>
<Zaterdag 	id="6">0</Zaterdag>
<Zonday 	id="0">0</Zonday>	
</days>
&#13;
&#13;
&#13;

例如: 今天是星期一所以jddayofweek(0)= 1 那么id = 1的节点的值需要改变,所以最后得到:

&#13;
&#13;
<?xml version='1.0' standalone='yes'?>
<days>
<Maandag	id="1">3</Maandag>
<Dinsdag 	id="2">0</Dinsdag>
<Woensdag	id="3">0</Woensdag>
<Donderdag 	id="4">0</Donderdag>
<Vrijdag 	id="5">0</Vrijdag>
<Zaterdag 	id="6">0</Zaterdag>
<Zonday 	id="0">0</Zonday>	
</days>
&#13;
&#13;
&#13;

我如何在PHP中执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以使用DOMdocumentDOMpath更改它只需更改xml文件名data.xml(2x)即可。设置$select$changeTo

<?php 

//Set your variables
$select = 1; //id you'd like to change
$changeTo = 3; //value you would like to change to

//Creating a new DOMDocument
$xmlDoc = new DOMDocument();

//from file
$xmlDoc->load("data.xml");

//Creating a new DOMPath
$Xpath = new DOMXPath($xmlDoc);

//the query selects all Matches any element node (*) that have a "id" attribute with a value of $select
$results = $Xpath->query('*[@id=' . $select . ']');

//Change node
$results->item(0)->nodeValue = $changeTo;

//Save document
$xmlDoc->save("data.xml");

echo "Edited document saved!"

?>

答案 1 :(得分:0)

我推荐simpleXML,因为它很好 - 简单

$xml = simplexml_load_string($x); // assume XML in $x
$id = 1; 

$day = $xml->xpath("*[@id=`$id`]")[0];
$day[0] = 5;

查看结果:

echo $xml->asXML();

评论:

  • xpath - 表达式将按$id选择日期并返回一系列SimpleXML - 元素。
  • 选择第一个元素(索引[0])并将其存储在$day中(需要PHP&gt; = 5.4)

看到它有效:https://eval.in/388827

进一步思考

如果你制作了这个XML,可以通过这样做来增加清晰度和灵活性:

<days>
    <day name="Maandag" id="1">0</day>
    <day name="Dinsdag" id="2">0</day>
    <etc />
</days>

答案 2 :(得分:-1)

如果你的文件总是很小且内容相似(比如你的例子)你可以preg_replace()他们(或者str_replace())...最好的解决方案是编写你自己的XML解析器,这是一个很好的仪式 - 所有程序员的通道。

http://php.net/manual/en/book.xml.php