zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Mit PHP in XML einfügen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 10.03.2010, 11:00
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Frage Mit PHP in XML einfügen

Hallo.

Ich hab ne Rechteverwaltung auf xml-Basis.

Code:
<?xml version="1.0" encoding="UTF-8"?>
<rechte>
	<modul value="mod1">
		<beschreibung>...</beschreibung>
		<user id="1">
			<lesen>1</lesen>
			<schreiben>1</schreiben>
		</user>
		<user id="2">
			<lesen>0</lesen>
			<schreiben>0</schreiben>
		</user>
	</modul>
	
	<modul value="mod2">
		<beschreibung>lorem ipsum</beschreibung>
		<user id="1">
			<lesen>1</lesen>
			<schreiben>1</schreiben>
		</user>
		<user id="2">
			<lesen>0</lesen>
			<schreiben>0</schreiben>
		</user>
	</modul>
</rechte>
Jetzt will ich via PHP für jedes Modul <modul value="xxx"> einen neuen Nutzer (<user id="3">) mit den Elementen <lesen> und <schreiben> hinzufügen. Dabei möchte ich jedes Modul einzeln ansprechen um die Lese- und Schreibrechte einzeln zu bestimmen.

Zur Zeit hab ich das (mit Hilfe von tutorials.de):

PHP-Code:
<?php 
    $user_id  
3;
    
$lesen 1;
    
$schreiben 0;

$doc DOMDocument::load("xml/rechte.xml");

$xp = new domxpath($doc);

$id 0;
foreach (
$doc->documentElement->childNodes as $articles)
{
    if (
$articles->nodeType == && $articles->nodeName == "user")
    {
        
$id++;
    }
}

$id++;
$neuer_user = <<< XML
<?xml version='1.0'?>
<user id="
$user_id">
    <lesen>
$lesen</lesen>
    <schreiben>
$schreiben</schreiben>
</user>
XML;
$doc2 DOMDocument::loadXML($neuer_user);
$xpath = new DOMXPath($doc2);

$query $xpath->query("/user");

foreach(
$query as $node)
{
    
$import $node->cloneNode(true);
}

$onewxml $doc->importNode($import,true);
$firstNode $doc->getElementsByTagName("user");
$doc->documentElement->insertBefore($onewxml$firstNode->item(0));
$doc->save("xml/rechte.xml");

?>
Beim Ausführen bekomme ich aber
Code:
Fatal error: Uncaught exception 'DOMException' with message 'Not
Found Error' in ...\rechte.php:39 Stack trace: #0 ...\rechte.php(39):
DOMNode->insertBefore(Object(DOMElement), Object(DOMElement)) #1
{main} thrown in ...\rechte.php on line 39
an den Kopf geworfen.

So weit ich weiß, findet er query("/user") in $xpath nicht wodurch
$query NULL wird und das ganze Kartenhaus in sich kollabiert.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 10.03.2010, 11:11
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.629
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Der Fehlermeldung nach zu urteilen wirft eine der Funktionen eine Ausnahme (Exception) die du mit catch {} 'auffangen' müsstest.

PHP: Ausnahmebehandlung - Manual

Mit DOM:ocument kenne ich mich nicht aus, ich würde es daher eher mit simpleXML probieren.
__________________
github | http://dnaber.de
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 10.03.2010, 11:27
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Standard

Okay....
try/catch-Block gesetzt, bloß der Fehler ist immer noch nicht weg:

Code:
exception 'DOMException' with message 'Not Found Error' in
...\rechte.php:40 Stack trace: #0 ...\rechte.php(40):
DOMNode->insertBefore(Object(DOMElement), Object(DOMElement)) #1 {main}
Soll heißen: Er meckert nicht weil der Try/Catch-Block nicht da war, sondern weil er das Attribut nicht finden konnte. Wäre auch zu schön gewesen


@David: Hast du ein Beispiel, wie ichs mit simpleXML lösen kann. Hab schon viel zum Thema gegoogelt, aber noch nicht einen Ansatz zur Lösung für meine Problematik gefunden.

Geändert von dows (10.03.2010 um 11:29 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 10.03.2010, 11:38
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.629
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

PHP-Code:
$rechte simplexml_load_file(dirname(__FILE__).'/rechte.xml');

$modules $rechte->xpath('modul');

foreach(
$modules as $modul) {
    
    
$modul->addChild('user');
    
$new_user $modul->xpath('user[not(@id)]');
    
$new_user[0]->addAttribute('id','3');
    
$new_user[0]->addChild('lesen','1');
    
$new_user[0]->addChild('schreiben','1');
}

// $rechte->asxml() speichern 
So müsste es gehen. Evtl. noch die XPaths genauer anpassen.
__________________
github | http://dnaber.de
Mit Zitat antworten
  #5 (permalink)  
Alt 10.03.2010, 11:49
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank. Ich habe jetzt ne Woche dran gesessen....und du liefest die Lösung frei Haus!

Zwei Anmerkungen habe ich noch:

Hiermit kann man jedes einzelne Modul ansprechen
PHP-Code:
$modules $rechte->xpath('modul[@value="<<<MODUL_NAME>>>"]'); 
Und fürs Speichern muss ich der Funktion noch den Pfad mitgeben.
PHP-Code:
$rechte->asxml('<<<PFAD>>>'); 
Mit Zitat antworten
  #6 (permalink)  
Alt 10.03.2010, 11:58
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.629
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Ne, ::asXML() liefert nur den String zurück. Speichern musst du es selbst.
Ich hab die Klasse Simplexml um eine Methode save() erweitert.
__________________
github | http://dnaber.de
Mit Zitat antworten
  #7 (permalink)  
Alt 10.03.2010, 11:59
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Standard

Naja..mit dem Code von oben speichert er auch

Geändert von dows (10.03.2010 um 12:59 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 10.03.2010, 12:04
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.629
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Ja, nix anderes macht meine Klasse
__________________
github | http://dnaber.de
Mit Zitat antworten
  #9 (permalink)  
Alt 10.03.2010, 12:59
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Standard

Ich hab mal den Code für das formatierte speichern eingebaut. Zwar ohne eigene Klasse, sollte aber dennoch funktionieren:

PHP-Code:
$xml_string $rechte->asXML();
    
$dom DOMDocument::loadXML($xml_string);
 
    
$dom->preserveWhiteSpace false;
    
$dom->formatOutput true;
    
$dom->save('rechte.xml'); 
Sollte! Es kommt trotzdem ein kleiner Bandwurm raus:
Code:
<user id="4"><lesen>1</lesen><schreiben>0</schreiben></user></modul>
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 10.03.2010, 13:03
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.629
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Ja, das ist mir auch aufgefallen. Hab aber noch keine Idee, woran das liegen könnte. Mit komplet durch SimpleXML aufgebauten Bäumen hat das bisher gut funktioniert. Hier gibt es noch einige andere Lösungen:
http://de.php.net/manual/de/simplexm...sXML.php#85340
__________________
github | http://dnaber.de

Geändert von David (10.03.2010 um 13:07 Uhr)
Mit Zitat antworten
Sponsored Links
Antwort

Stichwörter
einfügen, php, xml

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Code in XML Datei mastermartin Serveradministration und serverseitige Scripte 5 04.12.2008 19:09
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
XML per link rel einfügen |SONY| Serveradministration und serverseitige Scripte 3 23.04.2007 20:57
XML in XML einbinden (serverseitig mit PHP) X-User Serveradministration und serverseitige Scripte 6 23.12.2006 21:13
XML samt Untertags durch PHP ausgeben webazubi (X)HTML 0 21.06.2006 20:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:24 Uhr.