webForumDet fria alternativet

Uppdatera xml

1 svar · 650 visningar · startad av Qimen

QimenMedlem sedan juni 20013 568 inlägg
#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?

plupMedlem sedan sep. 2005100 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.

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb