xsl stylesheet Frage
Dexter
- xsl
0 MudGuard0 Dexter0 Thomas J.S.0 Dexter0 Dexter0 Thomas J.S.0 Dexter
Irgendwie einen finde ich nicht die Lösung
<root>
<test wahl="yes">
<rahmen wahl="yes">1200</rahmen>
</test>
<test wahl="no">
<produkt wahl="no">138</produkt>
</test>
</root>
Mein stylesheet funktioniert meinen Ansprüchen genügend. Jetzt will ich aber daraus ein zweites Stylesheet machen, dass nur Elemente aus der XML Quelle abarbeitet, die ein bestimmtes Merkmal haben. ich dachte ich kann das mit xsl:template match eingrenzen, aber schein will xsl das nicht so wie ich ;-(
<xsl:template match="/*[@wahl="no"]">
.
.
.
</xsl:template>
Wo ist mein Denkfehler bzw. wie kann ich es lösen, da ich nicht das komplette stylesheet umschreiben kann. und die auswahl am anfang festgelegt werden muss. Hat jemand schon ähnliches Problem gehabt?
Hi,
<xsl:template match="/*[@wahl="no"]">
Du hast ein Problem mit den ".
Verwende außen oder innen '.
cu,
Andreas
Ups, dass hatte ich nur falsch eingetragen, ja da sollte ' stehen, aber damit ist mein prblem nicht beseitigt. Ich hatte es jetzt schon einmal mit einer kleinen test xml probiert und da funktionierte es mit
<xsl:template match="*[@wahl='no']">
aber wenn ich es auf meine "große" XML Datei anwenden, kommt nur müll.
Hi,
<xsl:template match="/*[@wahl="no"]">
Du hast ein Problem mit den ".
Verwende außen oder innen '.cu,
Andreas
Hallo,
<xsl:template match="*[@wahl='no']">
aber wenn ich es auf meine "große" XML Datei anwenden, kommt nur müll.
Dann rufst du vermutlich die Templates falsch auf. Ohne Code kann man aber nichts genaures sagen.
Grüße
Thomas
So sehe mein xml und xsl file etwa aus. Im xsl verwende ich nur ein xsl:template
XSL File:
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xyz="http://www.xyz.org/instance" xmlns:iso4222="http://www.xyz.org/iso4222" xmlns:abc="http://abc.org/int/2005" xmlns="http://www.xyz.org/instance" exclude-result-prefixes="abc iso4222 xyz">
<xsl:output method="html"/>
<xsl:decimal-format name="base" decimal-separator="." grouping-separator="," minus-sign="-"/>
<xsl:template match="/">
<html xmlns="http://www.xyz.org/instance">
<body>
.
.
.
.
.
XML File
<?xml version="1.0" encoding="utf-8"?>
<xbrl xmlns="http://www.xyz.org/instance" xmlns:link="http://www.xyz.org/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4222="http://www.xyz.org/iso4222" xmlns:abc="http://abc.org/int/2005">
<link:schemaRef xlink:type="simple" xlink:href="schema.xsd"/>
<root>
<versuch wahl="yes">8764386</versuch>
<!-- usw. usw. -->
.
.
.
</root>
Wie gesagt, wenn ich <xsl:template match="*[@wahl='no']"> werden mir zwar werte angezeigt, aber alle nur hintereinander und sind auch nicht die ich brauche. Wo liegt da mein Fehler? Ich raffe es nicht.
Hallo,
<xsl:template match="*[@wahl='no']">
aber wenn ich es auf meine "große" XML Datei anwenden, kommt nur müll.Dann rufst du vermutlich die Templates falsch auf. Ohne Code kann man aber nichts genaures sagen.
Grüße
Thomas
Vergiss die andere nachricht, da war ein fehler drin.
So sehe mein xml und xsl file etwa aus. Im xsl verwende ich nur ein xsl:template
XSL File:
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xyz="http://www.xyz.org/instance" xmlns:iso4222="http://www.xyz.org/iso4222" xmlns:abc="http://abc.org/int/2005" xmlns="http://www.xyz.org/instance" exclude-result-prefixes="abc iso4222 xyz">
<xsl:output method="html"/>
<xsl:decimal-format name="base" decimal-separator="." grouping-separator="," minus-sign="-"/>
<xsl:template match="/">
<html xmlns="http://www.xyz.org/instance">
<body>
.
.
.
.
.
XML File
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.xyz.org/instance" xmlns:link="http://www.xyz.org/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4222="http://www.xyz.org/iso4222" xmlns:abc="http://abc.org/int/2005">
<link:schemaRef xlink:type="simple" xlink:href="schema.xsd"/>
<versuch wahl="yes">8764386</versuch>
<!-- usw. usw. -->
.
.
.
</root>
Wie gesagt, wenn ich <xsl:template match="*[@wahl='no']"> werden mir zwar werte angezeigt, aber alle nur hintereinander und sind auch nicht die ich brauche. Wo liegt da mein Fehler? Ich raffe es nicht.
Hallo,
<xsl:template match="*[@wahl='no']">
aber wenn ich es auf meine "große" XML Datei anwenden, kommt nur müll.Dann rufst du vermutlich die Templates falsch auf. Ohne Code kann man aber nichts genaures sagen.
Grüße
Thomas
Hallo,
Vergiss die andere nachricht, da war ein fehler drin.
OK ;-)
So sehe mein xml und xsl file etwa aus. Im xsl verwende ich nur ein xsl:template
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.xyz.org/instance" xmlns:link="http://www.xyz.org/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4222="http://www.xyz.org/iso4222" xmlns:abc="http://abc.org/int/2005">
<link:schemaRef xlink:type="simple" xlink:href="schema.xsd"/>
<versuch wahl="yes">8764386</versuch>
<!-- usw. usw. -->
.
.
.
</root>Wie gesagt, wenn ich <xsl:template match="*[@wahl='no']"> werden mir zwar werte angezeigt, aber alle nur hintereinander und sind auch nicht die ich brauche. Wo liegt da mein Fehler? Ich raffe es nicht.
Das/dein Problem ist zwar ähnlich wie unter https://forum.selfhtml.org/?t=112506&m=711655 besprochen.
Das Element <versuch> liegt im default Namensraum (xmlns="http://www.xyz.org/instance).
Auch bei dir gibt es die zwei Möglichkeiten (mit XSLT 1)
a) alle Elemente mit einem Prefix versehen (<foo:root xmlns:foo="http://www.xyz.org/instance"> ... foo:versuch ... etc.)
oder b)
du greifst auf die Elemente mit Namen zu *[local-name() = '...'][@wahl='no'], oder alternativ kannst du versuchen *[namespace-uri() = 'http://www.xyz.org/instance'][@wahl='no']
ABER, eigentlich sollte das bei dir auch ohne funktionieren. *
--------
<xsl:stylesheet version="1.0" xmlns="http://www.xyz.org/instance" ...> zusammen mit <html xmlns="http://www.xyz.org/instance"> ist eigentlich unnötig.
Bei: <xsl:stylesheet version="1.0" xmlns="http://www.xyz.org/instance" ...> enthält das Root-Element automatisch den entsprechenden Namensraum, oder du läßt es aus xsl:stylesheet weg und verwendest nur <html xmlns="http://www.xyz.org/instance">
------------------------------------------------
* So funktioniert es bei mir z.B.
XML:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.xyz.org/instance"
xmlns:link="http://www.xyz.org/linkbase"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:iso4222="http://www.xyz.org/iso4222"
xmlns:abc="http://abc.org/int/2005">
<link:schemaRef xlink:type="simple" xlink:href="schema.xsd"/>
<versuch wahl="yes">8764386</versuch>
<!-- usw. usw. -->
</root>
------------------------------------------------
XSL:
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xyz="http://www.xyz.org/instance"
xmlns:iso4222="http://www.xyz.org/iso4222"
xmlns:abc="http://abc.org/int/2005"
xmlns="http://www.xyz.org/instance"
exclude-result-prefixes="abc iso4222 xyz">
<xsl:output method="html"/>
<xsl:decimal-format name="base" decimal-separator="." grouping-separator="," minus-sign="-"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="*[@wahl='yes']">
<h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
------------------------------------------------
AUSAGABE:
<html xmlns="http://www.xyz.org/instance">
<body>
<h1>8764386</h1>
</body>
</html>
Grüße
Thomas
Hm, danke fuer den Tipp aber er will das einfach nicht annehmen, bin am verzweifeln. wenn ich *[@wahl='yes'] verwende, dann generiert "er" die Ausgabe der Werte ohne jegliches Format aneinander gereiht umd danach noch viele male die richtige Ausgabe wie bei "/" aber so 10 Mal und mehr nacheinandern. Ich blicke da langsam nicht mehr durch.
Hallo,
Hm, danke fuer den Tipp aber er will das einfach nicht annehmen, bin am verzweifeln. wenn ich *[@wahl='yes'] verwende, dann generiert "er" die Ausgabe der Werte ohne jegliches Format aneinander gereiht umd danach noch viele male die richtige Ausgabe wie bei "/" aber so 10 Mal und mehr nacheinandern. Ich blicke da langsam nicht mehr durch.
Ich sage das recht selten, aber wen dein XML/XSL groß sind, sende sie mir per Mail zu, denn so kommen wir nicht wirklich weiter.
Grüße
Thomas