Attribute von einem XML-Schema lesen

RE-DIK

Mitglied
Hallo zusammen,

ich würde gerne mache Inhalte meiner XSD lesen indem ich mit XSL die Inhalt in eine XML Transformiere.

XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:cptype name="Gruppe">
<xs:element ref="zg"/>
<xs:attribute ref="change"/>
</xs:cptype>
</xs:schema>

XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<inhalt>
<xsl:value-of select="schema/cptype/@name"/>
<xsl:value-of select="schema/cptype/element/@ref"/>
<xsl:value-of select="schema/cptype/attribute/@ref"/>
</inhalt>
</xsl:template>
</xsl:stylesheet>

Hoffentlich kann mir jemand helfen.
 
Hi!

Das was Du da geschrieben hast ist von einem (validen) XMLSchema weit entfernt... :p
Wie dem auch sei, Du kannst mit Deinem Template die Werte nicht auslesen, weil die XPath-Statements nicht passen bzw. Du den Namensraum nicht berücksichtigst:
XML:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
 <xsl:template match="/">
  <inhalt>
   <xsl:value-of select="xsd:schema/xsd:cptype/@name"/>
   <xsl:text> </xsl:text> <!-- Leerzeichen sollen ganz nützlich sein... -->
   <xsl:value-of select="xsd:schema/xsd:cptype/xsd:element/@ref"/>
   <xsl:text> </xsl:text>
   <xsl:value-of select="xsd:schema/xsd:cptype/xsd:attribute/@ref"/>
  </inhalt>
 </xsl:template>
</xsl:stylesheet>

Gruß
Enum
 
Danke für deine Hilfe

Hab was gelernt : ) noch ein kleines Problem die Ausgabe die raus kommt sieht so aus.

<inhalt xmlns:xsd="http://www.w3.org/2001/XMLSchema"> mein Inhalt </inhalt>

wie bekomme ich dies raus?
 
'n Abend!

So einfach geht das nicht, das liegt an dem XSL-T Prozessor den Du benutzt: Der Einfachheit halber übernimmt er einfach alle definierten Namensräume ohne zu prüfen ob sie noch Verwendung finden.
Allerdings hat XSL-T das exclude-result-prefixes Attribut, welches es erlaubt spezielle - oder einfach alle (#all) - Namensräume zu "unterschlagen":
XML:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
 <xsl:template match="/">
  <xsl:element name="inhalt" exclude-result-prefixes="#all"> 
   <xsl:value-of select="xsd:schema/xsd:cptype/@name"/>
   <xsl:text> </xsl:text> <!-- Leerzeichen sollen ganz nützlich sein... -->
   <xsl:value-of select="xsd:schema/xsd:cptype/xsd:element/@ref"/>
   <xsl:text> </xsl:text>
   <xsl:value-of select="xsd:schema/xsd:cptype/xsd:attribute/@ref"/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>

Gruß
Enum
 
Funktioniert nicht mein Tool will dies nicht ausführen.

Kennst du ein gutes Tool das große Datenmengen verarbeiten kann und Kostenfrei ist?
 
Hi!

Der Klassiker ist wohl xsltproc vom GNOME Projekt, basiert auf libxslt und ist - soweit ich das beurteilen kann - der schnellste XSL-T Prozessor und auch derjenige, mit dem ich das Stylesheet oben getestet habe. Leider unterstützt xsltproc nur XSL-T in Version 1.0, allerdings hab' ich bisher Version 2 noch nie benötigt.
Weitere Implementationen sind z.B. Xalan von der Apache Foundation und natürlich Saxon von Michael Kay, wobei letztere auch XSL-T 2.0 unterstützt und wohl die meisten zusätzlichen Features enthält. Leider ist Saxon nur teilweise OpenSource.
Wikipedia und Google können Dir noch mehr nennen, die oben sind die einzigen mit denen ich bisher gearbeitet habe.

Gruß
Enum
 

Neue Beiträge

Zurück