2015-06-28 120 views
1

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

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

例如: 今天是星期一所以jddayofweek(0)= 1 然后与ID = 1层的需要的节点的值来改变,所以在最终我们得到:

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

如何在PHP中执行此操作?

回答

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(); 

评论:

  • the xpath -expression will select the day by $id and give back the array of SimpleXML -elements。
  • 选择第1个要素(指数[0])并将其存储在$day(需要PHP> = 5.4)

看到它的工作:https://eval.in/388827

思考进一步

如果你作出这样的XML,通过使其如此变得更加清晰和灵活:

<days> 
    <day name="Maandag" id="1">0</day> 
    <day name="Dinsdag" id="2">0</day> 
    <etc /> 
</days> 
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

如果你的文件总是很小,类似的内容(如你的例子),你可以的preg_replace()他们(或者str_replace()函数)......最好的解决办法是写自己的XML解析器,这是对于所有程序员来说,这是一个很好的仪式。

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