XML Getter/Setter

Michael_User

Grünschnabel
Hallo !


Muss die Struktur eines XML-Files angpasst werden,
können Anwendungen die diese Strutur voraussetzen, nicht mehr damit arbeiten.

z.B. eine XSLT, die mit XPath arbeitet.

Im vorliegenden Fall, muss eine Konfiguration erweitert werden. Prinzip:

Aus
<Config>
<Data>Hello World !</Data>
</Config>

wird
<Config>
<Datas>
<Data>Hello World !</Data>
<Data>Hello User !</Data>
</Datas>
</Config>

Und schon passen XPath-Zugriffe nicht mehr.

Gedachte Abhilfe:
Das XML-File selbst bietet eine Art Schnittstelle an ("XML-Getter"),

welche dem User Informationen anbietet, ohne das er die Struktur kennen muss,
und im vorliegenden Fall nachträglich anpassen muss.

<Config>
<XPaths>
<XPath name="showWorld" >//Datas/Data[ @name='world' ]</XPath>
</XPaths>
<Datas>
<Data name"World" >Hello World !</Data>
<Data name"User" >Hello User !</Data>
</Datas>
</Config>

Statt nun
<xsl:value-of select="//Datas/Data[@name='World']" />

würde man nun festschreiben:
<xsl:value-of select="//XPath[@name='showWorld']" />

Mein Problem:
Das Eergebnis wird natürlich nicht als XPath-Kommando gewertet,
sondern als String ohne Bedeutung.

Wie könnte man einen Rückgabestring,
wiederum als XPath-Kommando einsetzen ?



Weiterer smarter Vorteil:
In xslt werden die XPath-Ausdrücke lesbarer.
 
xml ist keine Programmiersprache


In meiner Vorstellung sind es Daten die durch Tag eingeschlossen sind

der Parser hat die Aufgabe beim durchlaufen der Xmldatei auf die Tags reagagieren


deshald ist bei xpath schon eine 2 Version am Start (nur die Browser können
dies noch nicht )darin enthalten ca 50 Funktionen


zu deinen Beispiel
ist zu sagen das es xsl:variable gibt dort kann man einmalig Werte(xpath ergebnis ) hinterlegen
als Beispiel
Code:
<?xml version="1.0"?>
<root>
	<Config>
		<Data>Hello World !</Data>
	</Config>


	<Config>
		<Datas>
			<Data>Hello World !</Data>
			<Data>Hello User !</Data>
		</Datas>
	</Config>
</root>

Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="yes" method="xml"/>
	<xsl:template match="/">
		<root>
			<xsl:apply-templates select="root"/>
		</root>
	</xsl:template>
	<xsl:template match="root">
		<xsl:variable name="dataHello" select="//Data[1]"/>
		<erg1>
			<xsl:value-of select="count($dataHello)"/>
		</erg1>
		<erg2>
			<xsl:value-of select="$dataHello[1]"/>
		</erg2>
		<erg3>
			<xsl:value-of select="$dataHello[2]"/>
		</erg3>
	</xsl:template>
</xsl:stylesheet>

ergebnis

Code:
<?xml version='1.0' ?>
<root>
  <erg1>2</erg1>
  <erg2>Hello World !</erg2>
  <erg3>Hello World !</erg3>
</root>

Helmut Hagemann
 

Neue Beiträge

Zurück