2016-01-08 69 views
0

當我設置XML標記的值/屬性時,出現問題。 這是我的PHP代碼:如何使用PHP中的SimpleXMLElement更改XML屬性(和值)

$f=simplexml_load_file("String.xml"); 
$f2=$f->imgdir; 
foreach($f2 as $imgdir) 
{ 
    $st=$imgdir->string; 

    foreach($st as $str) 
    { 
     $fd=$str->attributes(); 
     $fd['value']='New Value'; 
    } 
} 
$f->asXML("String.xml"); 

這是我String.xml文件的內容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<imgdir name="Cash.img"> 
    <imgdir name="5000011"> 
     <string name="name" value="Monkey"/> 
     <string name="desc" value="A lovely effect that shows a baby angel floating around as your protector. Designate a HotKey to turn the effect on/off."/> 
    </imgdir> 
    <imgdir name="5010000"> 
     <string name="name" value="Sunny Day"/> 
     <string name="desc" value="A special effect in which you&apos;ll see a brightly smiling sun floating over you. On the KeyConfig, configure this on a button of your choice to turn the effect on/off."/> 
    </imgdir> 
</imgdir> 

我怎樣才能改變每<string>變量的值屬性並保存XML文件?我應該如何處理當前的代碼?

感謝您閱讀我的問題!

+0

您的代碼正在爲更改value =「新值」。你想要什麼 ? – Vegeta

+0

@Vegeta:我想通過操作(value =「New value」)知道,我可以更改爲XML文件嗎? –

+0

ya .. $ f-> asXML(「String.xml」);語句將內容保存到文件本身。 – Vegeta

回答

0

基礎

我建議你選擇所有<string>節點與xpath

$xml = simplexml_load_string($x); // assume XML in $x 
$strings = $xml->xpath("//string"); 

上面的語句將選擇所有<string>節點作爲SimpleXml元素到數組。
//string中的雙斜槓將花費<string>,而不管它們在樹中的位置。

現在它是簡單的迭代$strings並設置新值:

foreach ($strings as $string) 
    $string["value"] = "new value"; 

注意應用於$strings的變化發生在$xml,所以:

echo $xml-asXML(); 

會顯示更改。

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

擴展

當然,你可能希望只選擇某些<string>節點,例如全部有name="name"。在這種情況下,你可以告訴xpath像:

$strings = $xml->xpath("//string[@name='name']"); 

注意的條件集[]@nameattribute名。