DeRPiNkY: XSLT zusammen mit XML-Schema ?

Beitrag lesen

Hallo,

vielen Dank für die sehr hilfreiche Antwort!
Die Möglichkeit mit dem Prefix im XML-Dokument fällt leider weg, bleibt also nur noch die Änderung des XSLT-Codes. Hast du vielleicht noch ne Idee wie man das mit dem <xsl:apply-templates /> hinbekommen könnte? Ich brauch das in dieser Reihenfolge:

<body>
<xsl:apply-templates select="*[name()='Head']"/>
<xsl:apply-templates select="*[name()='BOM']"/>
<xsl:apply-templates select="*[name()='Head']" mode="toc"/>
</body>

wie wähle ich aber diese Templates aus? So geht das nicht.

Du muss den Pfad anpassen, wie würdest du es "normal" machen?
Basierend auf mein vorheriges XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Untitled</title>
            </head>
            <body>
                <xsl:apply-templates select="./*[name() = 'Article']" />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="*[name() = 'Article']">
        <div>
            <xsl:apply-templates select="./*[name() = 'data']" />
        </div>
    </xsl:template>
    <xsl:template match="*[name() = 'data']">
        <h1><xsl:value-of select="."/></h1>
    </xsl:template>
</xsl:stylesheet>

Wenn der Pfad bei dir anderes ist, muss du das leider entsprechend angeben
<xsl:apply-templates select="*[name() = 'Article']/*[name() = 'ELEMENT]" />

<xsl:apply-templates select="*[name() = 'Article']/*[name() = 'ELEMENT][@attribut = 'WERT']" />  etc.

Ich muss doch dann bei jedem einzelnen Element mit
<h1><xsl:value-of select="*[name()='ELEMENT']"/></h1>
den entsprechenden Wert rausholen oder???

Ja.

Irgendwie ziemlich scheisse dass des nicht gscheit unterstützt wird!

Leider, und XSLT 2 ist noch nicht wirklich zum produktiven Einsatzt geeignet.

Grüße
Thomas

PS: eigentlich müsstest du statt name() local-name() verwenden, aber in deinem Fall ist es gleich.

Klingt plausibel, ich brings aber irgendwie immer noch nicht zum laufen, bin einfach zu blöd scheinbar!

Hier mein Code:

<xsl:template match="/">
<html>
<head>
<title>Stueckliste</title>
</head>
<body>
<xsl:apply-templates select="./*[name()='Head']"/>
<xsl:apply-templates select="./*[name()='BOM']"/>
<xsl:apply-templates select="./*[name()='Head']" mode="toc"/>
</body>
</html>
</xsl:template>

<!-- Darstellung der Kopfdaten  - - - -  -->

<xsl:template match="*[name()='Article']/*[name()='Head']">
<table class="tab1" bgcolor="#c0c0c0" bordercolor="black" width="650px" heigth="40px" cellspacing="0" cellpadding="0">
<colgroup>
<col width="60px"></col>
<col width="85px"></col>
<col width="155px"></col>
<col width="30px"></col>
<col width="45px"></col>
<col width="75px"></col>
<col width="200px"></col>
</colgroup>
<tr>
<td class="border1" rowspan="2" height="10px"><p align="center">Siemens PTD&#160;T</p></td>
<td class="border1" rowspan="2"><p align="center">engeneering <font size="3">BOM</font></p></td>
<td class="border1" bgcolor="#007575"><font color="white"><p>&#160;ident no. -EX</p></font></td>
<td class="border1" bgcolor="#007575"><font color="white"><p>&#160;RI</p></font></td>
usw....

Das XML-Dokument schaut folgendermaßen aus:

<Article xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
         xsi:schemaLocation='http://www.bernd.de Article-Schema.xsd'
  xmlns='http://www.bernd.de'>
 <Head>
  <ART.PartID></ART.PartID>
  <ART.ZNr></ART.ZNr>
  <ART.WeightC></ART.WeightC>
  .
                .
                .
  <ART.Surface></ART.Surface>
  <ART.MatText></ART.MatText>
 </Head>
 <BOM>
  <Position>
   <ARTART.PosNo></ARTART.PosNo>
   <ARTART.PartID></ARTART.PartID>
   .
                        .
                        .

kannst du was damit anfangen?
Vielen Dank!

Cu Bernd