php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 20-09-2005, 20:46
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard xsl:value-of mit Node "verknüpfen"

Folgendes: Ich habe folgenden XML Aufbau
Code:
	<config>
		<lang>1</lang>
	</config>
	<mainnav>
		<item id="3" module="_shop" part="cat" state="active">
			<name lang="1">Fische</name>
			<name lang="2">Fishs</name>
		</item>
	</mainnav>
Nun möchte ich über die vielen Punkte aus Mainnav eine for-each laufen lassen, nach dieser Art:

Code:
	<xsl:for-each select="/nav/mainnav/item">
		<xsl:if test="@state = 'active'">
			<a href="{@module}"><xsl:value-of select="name" /></a>
		</xsl:if>
	</xsl:for-each>
Wie kann ich es machen, bzw. kann ich es überhaupt machen, dass nur das Node gewählt wird, wo das Attribut "lang" mit dem Wert aus der Config übereinstimmt oder ist dieser Aufbau der XML Datei unglücklich dafür?

Danke für eure Hilfe!

BTW: Wenn ich in <xsl:if> eine ODER/UND-Verknüpfung machen will, kann ich das dann einfach über && oder ||?

Geändert von Heavensdoor (20-09-2005 um 20:49 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 21-09-2005, 14:52
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
dass nur das Node gewählt wird, wo das Attribut "lang" mit dem Wert aus der Config übereinstimmt
wenn ich mich nicht irre, kannst du eine variable anlegen, die du in der abfrage verwenden kannst.
Zitat:
Wenn ich in <xsl:if> eine ODER/UND-Verknüpfung machen will, kann ich das dann einfach über && oder ||?
mal versucht?
Mit Zitat antworten
  #3 (permalink)  
Alt 21-09-2005, 17:22
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard Re: xsl:value-of mit Node "verknüpfen"

Zitat:
Original geschrieben von Heavensdoor
Folgendes: Ich habe folgenden XML Aufbau
Code:
	<config>
		<lang>1</lang>
	</config>
	<mainnav>
		<item id="3" module="_shop" part="cat" state="active">
			<name lang="1">Fische</name>
			<name lang="2">Fishs</name>
		</item>
	</mainnav>
Nun möchte ich über die vielen Punkte aus Mainnav eine for-each laufen lassen, nach dieser Art:

Code:
	<xsl:for-each select="/nav/mainnav/item">
		<xsl:if test="@state = 'active'">
			<a href="{@module}"><xsl:value-of select="name" /></a>
		</xsl:if>
	</xsl:for-each>
Wie kann ich es machen, bzw. kann ich es überhaupt machen, dass nur das Node gewählt wird, wo das Attribut "lang" mit dem Wert aus der Config übereinstimmt oder ist dieser Aufbau der XML Datei unglücklich dafür?

Danke für eure Hilfe!

BTW: Wenn ich in <xsl:if> eine ODER/UND-Verknüpfung machen will, kann ich das dann einfach über && oder ||?
So:
Code:
<!-- Ausgewählte Sprache "zwischenspeichern" -->
<xsl:variable name="lang" select="/nav/config/lang"/>

<xsl:for-each select="/nav/mainnav/item[@state = 'active']">
  <!-- Man beachte den XPath-Ausdruck in @select. Wählt nur den Knoten aus, auf der die richtige Sprache enthält -->
  <a href="{@module}"><xsl:value-of select="name[@lang = $lang]" /></a>
  <!-- Man könnte das $lang auch mit /nav/config/lang ersetzen, finde es aber so sauberer :D -->
</xsl:for-each>
Habe mir gleich mal erlaubt die if-Anweisung zu entfernen und es ist xsl:for-each/@select mit einzubauen (sollte etwas schneller sein und ist meiner Meinung nach besser zu lesen).

Edit: Die und/oder-Verknüpfung findet nicht über &&/|| statt, sondern mit den Schlüsselworten and/or.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

Geändert von Nezzar (21-09-2005 um 17:26 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 21-09-2005, 19:50
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von penizillin
mal versucht?
Zu der Sache mit dem && und || - ich habe es schonmal versucht. Da ich im Web aber folgendes gefunden hatte:

<xsl:if test="{$x && $y && $z}">
....
</xsl:if>

und bei mir nur ein Fehler auftauchte wollte ich deswegen eher mal nachfragen. Hätte ja sein können, dass es nur ein Schreibfehler meiner Seite war.

@Nezzar: Danke, für diese Info
Mit Zitat antworten
  #5 (permalink)  
Alt 22-09-2005, 08:10
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Soo, da bin ich wieder mit einer kleinen Erweiterung

Ich habe mir nun einen weiteren Knoten für eine Defaultsprache erstellt und diesen auch in einer Variable oben eingelegt. Nun wollte ich folgendes realisieren:

Wenn die gewählte Sprache vorhanden ist, wähle diese. Ansonsten die Defaultsprache.

<xsl:value-of select="name[@lang = $lang]" />

Hab mir erstmal gedacht, dass ich es vllt. in dem Prädikat machen kann. Jedoch gibt dieses ja nur true oder false zurück, wodurch ich sowas nicht wirklich machen kann oder?

Die andere Möglichkeit wäre natürlich auch, dass ich halt für jede Sprache, auch wenn nichts dafür hinterlegt ist, einen eigenen Knoten eingetrage. Dadurch wird die Datei aber nur unnötig groß und dürfte den Zugriff aufs FS unnötig ausbremsen.

Deswegen würde ich nun sehen, ob es mit einem <xsl:choose> aufbau machbar ist. Würde jedoch gerne mal eure Meinung dazu hören, ob man es damit machen kann. Den Rest mag ich mir dann selber bauen
Mit Zitat antworten
  #6 (permalink)  
Alt 22-09-2005, 08:41
loci
 Junior Member
Links : Onlinestatus : loci ist offline
Registriert seit: Feb 2003
Ort: Saarland
Beiträge: 82
loci ist zur Zeit noch ein unbeschriebenes Blatt
Standard

<xsl:choose>
<xsl:when test="name[@lang = $lang] != ''>
// waehle gegebene sprache
</xsl:when>
<xsl:otherwise>
// waehle defaultsprache
</xsl:otherwise>
</xsl:choose>
Mit Zitat antworten
  #7 (permalink)  
Alt 22-09-2005, 19:27
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sooo, ich habe nun dank eurer Hilfe diesen Block "geschaffen"

Code:
<xsl:for-each select="/nav/mainnav/item[@state = 'active' or $admin = 'yes']">
						
	<li>» <a href="{@module}">
						
	<xsl:choose>
		<xsl:when test="name[@lang = $lang] != ''">
			<xsl:value-of select="name[@lang = $lang]" />
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="name[@lang = $default]" />
		</xsl:otherwise>
	</xsl:choose>
						
	</a></li>
						
</xsl:for-each>

Geändert von Heavensdoor (22-09-2005 um 22:13 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 22-09-2005, 19:50
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

läuft's jetzt?

nimm bitte die drei wilden einrück-tabs aus dem code raus.

ist "»" eigentlich validierbar?
Mit Zitat antworten
  #9 (permalink)  
Alt 22-09-2005, 22:18
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, es läuft nun so wie ich es erwartet habe. Zumindest ist mir noch nichts anderes aufgefallen.

Wie meinst du das mit dem "»" und dem validieren? Habe nirgends etwas gefunden, wo ich XSL Dateien validieren kann oder verstehe ich dich nur falsch?
Mit Zitat antworten
  #10 (permalink)  
Alt 23-09-2005, 10:01
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Penizillin meinte vermutlich, ob das XML immer noch well-formed ist mit diesem Zeichen.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #11 (permalink)  
Alt 23-09-2005, 19:42
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielleicht reicht mein Wissen nicht soweit, aber das Zeichen steht in der XSL Datei. Wie weit soll das die XML-Datei beeinflussen?
Mit Zitat antworten
  #12 (permalink)  
Alt 25-09-2005, 12:18
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo, da bin ich wieder

ich habe bei mir zum testen eben mal XAMPP von ApacheFriends runtergeladen, da ich auf diesem Rechner nur kurz etwas zum testen brauchte.

Nun wollte ich in einer XSL Datei einen Import durchführen:
Code:
<xsl:import href="ext.xsl" />
Darauf erhalte ich jedoch folgende Fehlermeldung:

Code:
Warning: xsltApplyOneTemplate: import was not compiled in C:\xampp\htdocs\test\index.php on line 22
Jetzt bin ich natürlich etwas verwirrt. Habe mich dazu dann mal nach Google bewegt und dort auch nichts dazu gefunden :/ Was mich doch sehr gewundert hat.

Wüsste vllt. jmd. woran das liegen kann?
Mit Zitat antworten
  #13 (permalink)  
Alt 25-09-2005, 14:15
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zeig mal ein paar (4-5) zeilen vor und nach dem import.
Mit Zitat antworten
  #14 (permalink)  
Alt 25-09-2005, 19:59
Heavensdoor
 Newbie
Links : Onlinestatus : Heavensdoor ist offline
Registriert seit: Jun 2005
Beiträge: 34
Heavensdoor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay, also einmal der Block wo das Template ist:

Code:
</xsl:template>

<xsl:template name="content">
	<div class="content">
		<xsl:import href="ext.xsl" />
	</div>
</xsl:template>

</xsl:stylesheet>
Dann der Punkt wo das Template aufgerufen wird:

Code:
		<xsl:apply-templates select="/nav/headnav" />
		<xsl:call-template name="mainnav" />
		
		<xsl:call-template name="content" />
		<div class="bottom"></div>
Ich habe nun auf php.net gelesen, dass es an z.B. Leerzeichen vor dem Import liegen. Habe ich jedoch nicht und daher bin ich auch etwas ratlos über das Problem :/
Mit Zitat antworten
  #15 (permalink)  
Alt 26-09-2005, 12:22
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Laut der MSDN kann ein xsl:import nur direkt unterhalb von xsl:stylesheet stehen. Daran liegt's vermutlich.

Zitat:
Vielleicht reicht mein Wissen nicht soweit, aber das Zeichen steht in der XSL Datei. Wie weit soll das die XML-Datei beeinflussen?
XSL an sich ist ebenfalls XML. Deshalb

__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

Newsmanager

Der Newsmanager ist ein Newssystem und Newsletter in einem. Mit WYSIWYG Editor und E-Mail import aus einer bestehenden MySql Datenbank sowie dynamische Kategorien / Themen Filter.

11.09.2019 Stephan_1972 | Kategorie: PHP/ News
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

11.09.2019 Stephan_1972 | Kategorie: PHP/ Webservice
ContentLion - Open Source CMS ansehen ContentLion - Open Source CMS

ContentLion ist ein in PHP geschriebenes CMS, bei dem man Seiten, Einstellungen usw. in Ordnern lagern kann

22.08.2019 stevieswebsite2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:34 Uhr.