PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   XML (https://www.php-resource.de/forum/xml/)
-   -   XSL - Problemchen (Sortierung) (https://www.php-resource.de/forum/xml/102623-xsl-problemchen-sortierung.html)

Clara 02-02-2012 11:00

XSL - Problemchen (Sortierung)
 
Hallo nochmal.
Es geht diesmal wieder um meine Bibliotheks-Liste, die ich nun über XSL ausgeben möchte in eine speziellen Art und Weise.

Die Struktur der XML ist die folgende: (gekürzt)

PHP-Code:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<?xml
-stylesheet type="text/xsl" href="layout.xsl" ?>
<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="lasttry.xsd">
<bibo>
    <bib_phdthesis type="phdthesis" id="Abadie:92">
      <author>B. Abadie</author>
      <title>On the K-theory of non-commutative Heisenberg manifolds</title>
      <school>Univ. of California at Berkeley</school>
      <year>1992</year>
    </bib_phdthesis>
    <bib_inproceedings type="inproceedings" id="Abadie:94">
      <author>B. Abadie</author>
      <title>”Vector bundles” over quantum Heisenberg manifolds</title>
      <booktitle>Algebraic Methods in Operator Theory</booktitle>
      <editor>R. Curto and P. E. T. Jørgensen</editor>
      <publisher>Birkhäuser, Boston - Basel - Berlin</publisher>
      <year>1994</year>
      <note>307-315</note>
    </bib_inproceedings>
    <bib_article type="article" id="Abadie:95">
      <author>B. Abadie</author>
      <title>Generalized fixed-point algebras of certain actions on crossed products</title>
      <journal>Pacific J. Math.</journal>
      <volume>171</volume>
      <year>1995</year>
      <note>1-21</note>
    </bib_article>
...

Ihr seht, es gibt in der Datei tausende Einträge von unterschiedlichen Typen (Article, Phdthesis, Inproceedings, ...), die nun über XSL geordnet nach dem Author ausgegeben werden sollen und genau da ist mein Problem.

Der Aufbau des XSL sieht folgendermaßen aus: (gekürzt)

PHP-Code:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <html><head>
 </head>
 
 <body>
 <h2>Hilbert C* Modules Bibliography</h2>
 <xsl:for-each select="bibliography/bibo">
    <xsl:sort select="author"/>
    <xsl:for-each select="bib_article">
    <table>
    <tr>
        <td class="nummer">
            <xsl:number level="single" count="*" format="[1]" />
        </td>
        <td class="inhalt">
        <xsl:if test="author">
            <xsl:text> </xsl:text>
            <xsl:value-of select="author" />
        </xsl:if>
        <xsl:if test="title">
        <xsl:text>, </xsl:text>
            <span class="title"><xsl:value-of select="title" /></span>
        </xsl:if>
        <xsl:if test="journal">
            <xsl:text>, </xsl:text>
            <xsl:value-of select="journal" />
        </xsl:if>
        <xsl:if test="volume">
            <xsl:text> </xsl:text>
            <span class="volume"><xsl:value-of select="volume" /></span>
        </xsl:if>
        <xsl:if test="year">
            <xsl:text> (</xsl:text>
            <xsl:value-of select="year" />
            <xsl:text>)</xsl:text>
        </xsl:if>
        <xsl:if test="number">
        <xsl:text>, number: </xsl:text>
            <xsl:value-of select="number" />
        </xsl:if>
        <xsl:if test="pages">
            <xsl:text>, pages: </xsl:text>
            <xsl:value-of select="pages" />
        </xsl:if>
        <xsl:if test="month">
            <xsl:text>, month: </xsl:text>
            <xsl:value-of select="month" />
        </xsl:if>
        </td>
        </tr>
        </table>
    </xsl:for-each>
    
    <xsl:for-each select="bib_book">
    <table>
    <tr>
        <td class="nummer">
            <xsl:number level="single" count="*" format="[1]" />
        </td>
        <td class="inhalt">
        <xsl:if test="author">
            <xsl:text> </xsl:text>
            <xsl:value-of select="author" />
        </xsl:if>
        <xsl:if test="title">
        <xsl:text>, </xsl:text>
            <span class="title"><xsl:value-of select="title" /></span>
        </xsl:if>
        <xsl:if test="publisher">
            <xsl:text>, </xsl:text>
            <xsl:value-of select="publisher" />
        </xsl:if>
        <xsl:if test="year">
            <xsl:text> (</xsl:text>
            <xsl:value-of select="year" />
            <xsl:text>)</xsl:text>
        </xsl:if>
        <xsl:if test="number">
        <xsl:text>, number: </xsl:text>
            <xsl:value-of select="number" />
        </xsl:if>
        <xsl:if test="pages">
            <xsl:text>, pages: </xsl:text>
            <xsl:value-of select="pages" />
        </xsl:if>
        <xsl:if test="month">
            <xsl:text>, month: </xsl:text>
            <xsl:value-of select="month" />
        </xsl:if>
        </td>
        </tr>
        </table>
    </xsl:for-each>
 </xsl:for-each>
 
</body></html>
</xsl:template>

</xsl:stylesheet>

Es wird zwar alles ausgegeben, aber eben nicht sortiert nach Author.
Was kann ich tun, um zum gewünschten Ziel zu kommen??

AmicaNoctis 02-02-2012 15:10

Hallo,

das author-Element kommt nicht als Kind von bibo vor, sondern nur als Enkel. Daher wird nicht sortiert. Du müsstest <xsl:sort select="*/author" /> schreiben, damit bei der Sortierung diese zusätzliche Ebene übersprungen wird.

Gruß,

Amica


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:24 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG