webForumDet fria alternativet
Logga in / Bli medlem

Uppdatera xml

PHP

1 svar · 650 visningar · startad av Qimen

Medlem sedan juni 20015 009 inlägg
Trådstart#1

Hej,

Har en XML-fil med en del värden som jag normalt hämtar med php's simple xml vilket fungerar utmärkt. Nu vill jag dock uppdatera ett par värden i filen och funktionen för att göra det med simple xml verkar vara lite smått buggad (eller mera, fungerar olika på olika system).

$doc->edn[0]->ccd->nid = 0;
$PW_XML->asXML("fil.xml");

asXml skriver över filen och uppdaterar den inte, normalt gör detta inget men jag har märkt att på en del system vill rättigheterna knasa sig. Vet inte riktigt hur jag ska lösa detta. Om jag borde köra dom xml och gå den vägen eller bara köra igenom filen med fopen? :q

Hur brukar ni göra när ni ska uppdatera xml-värden?

Medlem sedan sep. 200593 inlägg
#2

brukar aldrig använda simpleXML, tycker det verkar för simpelt ;)

just nu använder jag mig av följande funktion. men den är inte riktigt snygg, ska skriva om den till att kanske replacea hela noder istället för bara innehållet. som det är nu så förblir tomma noder tomma, bara noder med innehållande text kan uppdateras. men jaja, det kanske kan få dig i rätt riktning iaf :)

data.xml

<item>
    <title><![CDATA[titeln här]]></title>
    <description><![CDATA[beskrivning här]]></description>
    <guid>20061111</guid>
</item>

funktionen

function update ($id, $titleStr, $textStr) {

	$doc = new DOMDocument();
	$doc->formatOutput = true;
	$doc->preserveWhiteSpace = false;
	$doc->load("./data.xml");
	$xpath = new DOMXPath($doc);
	$params = $xpath->query("//channel/item[guid=" . $id ."]");

	$param = $params->item(0);
	$cNode = $param->firstChild;

	while ($cNode != NULL) {
		if ($cNode->nodeName == "title")
			$cNode->firstChild->nodeValue = $titleStr;
		if ($cNode->nodeName == "description")
			$cNode->firstChild->nodeValue = $textStr;
		$cNode = $cNode->nextSibling;
	}
	$doc->save("./data.xml");
}

men i slutändan så "skrivs" ju även denna xml-fil över. eller? så problemet kanske inte löser sig alls.

258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)