• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mittels PHP Bestimmt wert in XML erstezen!

Acer90

Mitglied
Hallo html.de Community,

Ich habe folgendes Problem, ich möchte den Wert ProcessId aus folgender XML:

PHP:
<?xml version="1.0" standalone="yes"?>
<ScreenDataSet xmlns="http://tempuri.org/ScreenDataSet.xsd">
  <ScreenDataTable>
    <ScreenNo>23</ScreenNo>
    <AppName>start.bat</AppName>
    <Username>user</Username>
    <ProcessId>4992</ProcessId>
    <AppPath>D:\home\user\apps\HLDS-Updat</AppPath>
    <Application>start.bat</Application>
    <AppParam />
  </ScreenDataTable>
  <ScreenDataTable>
    <ScreenNo>35</ScreenNo>
    <AppName>start.bat</AppName>
    <Username>user2</Username>
    <ProcessId>8544</ProcessId>
    <AppPath>D:\home\user2\apps\updater-wa</AppPath>
    <Application>start.bat</Application>
    <AppParam />
  </ScreenDataTable>

ändern, ich habe dafür zur Verfügung bereits die alte ProcessId und die neue ProcessId.

Leider habe ich von php xml wenig Ahnung, deshalb wäre erstmal meine frage ob es möglich ist.

Danke schon einmal im vorraus.

mfg: Acer

p.s. Die ProcessId ist nur einmal so vorhanden.
 
Werbung:
PHP:
<?php

$xml = <<<EOT
<?xml version="1.0" standalone="yes"?>
<ScreenDataSet xmlns="http://tempuri.org/ScreenDataSet.xsd">
  <ScreenDataTable>
    <ScreenNo>23</ScreenNo>
    <AppName>start.bat</AppName>
    <Username>user</Username>
    <ProcessId>4992</ProcessId>
    <AppPath>D:\home\user\apps\HLDS-Updat</AppPath>
    <Application>start.bat</Application>
    <AppParam />
  </ScreenDataTable>
  <ScreenDataTable>
    <ScreenNo>35</ScreenNo>
    <AppName>start.bat</AppName>
    <Username>user2</Username>
    <ProcessId>8544</ProcessId>
    <AppPath>D:\home\user2\apps\updater-wa</AppPath>
    <Application>start.bat</Application>
    <AppParam />
  </ScreenDataTable>
</ScreenDataSet>
EOT;

$processId = 4992;
$newProcessId = 1234;

$doc = new DOMDocument();

$doc->loadXML($xml);

$xpath = new DOMXPath($doc);
$xpath->registerNamespace('x', 'http://tempuri.org/ScreenDataSet.xsd');

$query = 'x:ScreenDataTable[x:ProcessId="' . $processId . '"]/x:ProcessId';

$items = $xpath->query($query, $doc->documentElement);

$items->item(0)->nodeValue = $newProcessId;

header('Content-Type: text/plain; charset=UTF-8');
echo $doc->saveXML();

Die XPath-Query geht vielleicht einen Tick eleganter, aber ich weiß die passende Funktion („Knoteninhalt zurückgeben“) gerade nicht, falls sie existiert.
 
Danke, kann ich jetzt auch PIDTasks.xml einbinden, und diese dann wieder speichern, oder muss ich dieser komplett laden?

PHP:
<?php

$xml = simplexml_load_file("PIDTasks.xml");

$processId = 4992;
$newProcessId = 1234;

$doc = new DOMDocument();

$doc->loadXML($xml);

$xpath = new DOMXPath($doc);
$xpath->registerNamespace('x', 'http://tempuri.org/ScreenDataSet.xsd');

$query = 'x:ScreenDataTable[x:ProcessId="' . $processId . '"]/x:ProcessId';

$items = $xpath->query($query, $doc->documentElement);

$items->item(0)->nodeValue = $newProcessId;

header('Content-Type: text/plain; charset=UTF-8');
echo $doc->saveXML();

funktioniert das so?
 
Werbung:
SimpleXML ist die „Konkurrenzbibliothek“ zu DOMDocument, das ist in der Form nicht unbedingt ergänzbar. Du kannst statt $doc->loadXML aber einfach $doc->load verwenden. Die Methode nimmer als Parameter einen Dateinamen entgegen.
 
Ok funktioniert alles. dir nochmal ein Großen dank.

hier der code für die nachwelt.

PHP:
<?php






$processId = 4992;
$newProcessId = 1234;

$doc = new DOMDocument();

$doc->load("PIDTasks.xml");

$xpath = new DOMXPath($doc);
$xpath->registerNamespace('x', 'http://tempuri.org/ScreenDataSet.xsd');

$query = 'x:ScreenDataTable[x:ProcessId="' . $processId . '"]/x:ProcessId';

$items = $xpath->query($query, $doc->documentElement);

$items->item(0)->nodeValue = $newProcessId;

header('Content-Type: text/plain; charset=UTF-8');

echo $doc->save("PIDTasks2.xml");
 
Zurück
Oben