Mindgap: Mehrere XML Dokumente einlesen

Hallo,

ein weiteres Problem. Ich versuche jetzt meinem XSLT beizubringen, mehrere XML-Dokumente zu verarbeiten.

Dazu benutze ich folgenden Ausdruck in meiner XSLT Datei:

<div class="float">
           <xsl:apply-templates select="document(@Name)/Article" mode="side"/>
 </div>

Das XSLT wird mit dieser Sammel XML verarbeitet:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="XSLT 3.xslt"?>
<Documents>
    <Datei Name="article.xml"/>
    <Datei Name="article2.xml"/>
</Documents>

Leider funktioniert das nicht so wie es soll. Irgendwelche Verbesserungsvorschläge?

Gruß und DANKE schonmal.
Mind

  1. Hallo,

    ein weiteres Problem. Ich versuche jetzt meinem XSLT beizubringen, mehrere XML-Dokumente zu verarbeiten.

    Dazu benutze ich folgenden Ausdruck in meiner XSLT Datei:

    <div class="float">
               <xsl:apply-templates select="document(@Name)/Article" mode="side"/>
    </div>

    Hoffentlich bist du in einem: <xsl:template match="Datei">
    Ist das Wurzelelement im article.xml und article2.xml tatsächlich "Article"?

    Das XSLT wird mit dieser Sammel XML verarbeitet:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="XSLT 3.xslt"?>
    <Documents>
        <Datei Name="article.xml"/>
        <Datei Name="article2.xml"/>
    </Documents>

    Es sollten keine Leerzeichen in dem Dateinamen stehen und es ist besser deine Datei .xsl (und nicht .xslt zu nennen)

    Grüße
    Thomas

    1. Hat sich nichts getan, hab die Änderungen so durchgeführt.

      Hoffentlich bist du in einem: <xsl:template match="Datei">

      Also ich verweise damit auf folgende Regel:

      <!-- Template Rules -->

      <xsl:template match="Article" mode="side" >
            xsl:choose
              <xsl:when test="testelement='HT'">
                <xsl:call-template name="ht"/>
              </xsl:when>
              xsl:otherwiseKein Artikel in HT vorhanden!</xsl:otherwise>
            </xsl:choose>
          </xsl:template>

      und folgendes Template:

      <!-- HT -->
        <xsl:template name="ht">
          <fieldset style= "border: 1px solid #999999; width: 100%">
            <h2><legend style= "-10px">Hot Topics</legend></h2>
            <ul style="">
                <li class="topic"><a href="LINK" target="_blank">
                <xsl:value-of select="Article/titel"/></a><br/>
                <xsl:value-of select="Article/abstract"/></li>
            </ul>
          </fieldset>

      <br/>
        </xsl:template>

      Ist das Wurzelelement im article.xml und article2.xml tatsächlich "Article"?

      Ja, anbei die XML Datei:

      <?xml version="1.0" encoding="UTF-8"?>
      <Article>
          <testelement>HT</testelement>
          <titel>Hello World die Zweite</titel>
          <abstract>Dies ist der Abstract, und soll publiziert werden.</abstract>
          <longtext/>
          <link>http://www.testlink.de/</link>
          <contact>test@abc.de</contact>
          <author>demo</author>
          <createdby/>
          <creationdate>2007-02-02</creationdate>
      </Article>

      1. Hallo,

        Hat sich nichts getan, hab die Änderungen so durchgeführt.

        Bei dem Kode kann ich den Parser verstehen, wenn er auf Urlaub geht ;-)

        Hoffentlich bist du in einem: <xsl:template match="Datei">

        Also ich verweise damit auf folgende Regel:

        <!-- Template Rules -->

        <xsl:template match="Article" mode="side" >
              xsl:choose
                <xsl:when test="testelement='HT'">

        Der Vergleich geht, aber es ist kein guter Stil das so abzufragen, aber das hatten wir schon, oder?

        <xsl:call-template name="ht"/>
                </xsl:when>
                xsl:otherwiseKein Artikel in HT vorhanden!</xsl:otherwise>
              </xsl:choose>
            </xsl:template>

        und folgendes Template:

        <!-- HT -->
          <xsl:template name="ht">
            <fieldset style= "border: 1px solid #999999; width: 100%">
              <h2><legend style= "-10px">Hot Topics</legend></h2>

        Korrigiere bitte deinen Kode, bitte mache keine Lerrzeichen nach = (z.B. beim style=)
        Apropos style: -10px von? Link, rechts, oben, unten, vom Teekuchen aus gesehen?

        <ul style="">
                  <li class="topic"><a href="LINK" target="_blank">

        Dein Elemente im XML heisst a) nicht "LINK" sondern "link" und b) du muss da entweder href="{link}" nehmen, oder <a target="_blank"><xsl:attribut name="href"><xsl:value-of select="link" /></xsl:attribute></a>

        <xsl:value-of select="Article/titel"/></a><br/>
                  <xsl:value-of select="Article/abstract"/></li>

        Du bist bereits im Article, darin befindet sich kein weiteres Article-Element also wird auch nicht gefunden.

        Grüße
        Thomas

        -----------------------------------
        <?xml version="1.0" encoding="iso-8859-1"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
         <xsl:template match="/Documents">
          <html>
           <head>
            <title>Untitled</title>
           </head>
           <body>
            <xsl:apply-templates select="Datei" />
           </body>
          </html>
         </xsl:template>
         <xsl:template match="Datei">
          <div class="float">
           <xsl:apply-templates select="document(@Name)/Article" mode="side"/>
          </div>
         </xsl:template>
         <xsl:template match="Article" mode="side" >
          xsl:choose
           <xsl:when test="testelement[. = 'HT']">
            <xsl:call-template name="ht"/>
           </xsl:when>
           xsl:otherwiseKein Artikel in HT vorhanden!</xsl:otherwise>
          </xsl:choose>
         </xsl:template>
         <xsl:template name="ht">
          <fieldset style="border: 1px solid #999999; width: 100%">
           <h2><legend style="">Hot Topics</legend></h2>
           <ul style="">
            <li class="topic">
             <a href="{link}" target="_blank">
              <xsl:value-of select="titel"/>
             </a><br/>
             <xsl:value-of select="abstract"/>
            </li>
           </ul>
          </fieldset>
          <br/>
         </xsl:template>
        </xsl:stylesheet>

        1. Hello out there!

          <h2><legend style= "-10px">Hot Topics</legend></h2>

          Korrigiere bitte deinen Kode, bitte mache keine Lerrzeichen nach = (z.B. beim style=)

          Das ist doch auch mit Leerzeichen korrektes XML.

          [25] Eq        ::= S? '=' S?
          [41] Attribute ::= Name Eq AttValue

          Gibt es XSLT-Prozessoren, die kein XML verstehen?

          See ya up the road,
          Gunnar

          --
          „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
          1. Hallo,

            <h2><legend style= "-10px">Hot Topics</legend></h2>

            Korrigiere bitte deinen Kode, bitte mache keine Lerrzeichen nach = (z.B. beim style=)

            Das ist doch auch mit Leerzeichen korrektes XML.

            Ja, ich habe ihm auch nicht gesagt, dass das an sich fehlerhaft wäre.
            Es geht um den ( bzw. einen sauberen) Stil! Lern er den schlampig, wir er immer so arbeiten.

            Grüße
            Thomas

            1. Hello out there!

              Es geht um den ( bzw. einen sauberen) Stil! Lern er den schlampig, wir er immer so arbeiten.

              So, wie du schreibst? >;-> SCNR.

              Und IIRC gibt es wirklich XSLT-Prozessoren, die kein XML verstehen: IIRC hatte ich mal Probleme mit der Transformation von sowas in der Art:

              <!DOCTYPE ns:element [  
                <!ENTITY nsentity "http://example.net/ns#">  
              ]>  
              <ns:element xmlns:ns="&nsentity;"/>
              

              Der Prozessor kam mit der Entity-Referenz bei der Namensraumdeklaration nicht klar.

              See ya up the road,
              Gunnar

              --
              „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
            2. Hello out there!

              Das ist doch auch mit Leerzeichen korrektes XML.

              Ja, ich habe ihm auch nicht gesagt, dass das an sich fehlerhaft wäre.

              Naja, du sagtest „korrigiere“, nicht „verschönere“.

              Und es gibt auch Fälle, wo’s mit Leerzeichen schöner sein mag:

              <rdf:RDF  
                xmlns:bio    ="http://purl.org/vocab/bio/0.1/"  
                xmlns:dc     ="http://purl.org/dc/elements/1.1/"  
                xmlns:dcterms="http://purl.org/dc/terms/"  
                xmlns:foaf   ="http://xmlns.com/foaf/0.1/"  
                xmlns:geo    ="http://www.w3.org/2003/01/geo/wgs84_pos#"  
                xmlns:lang   ="http://purl.org/net/inkel/rdf/schemas/lang/1.1#"  
                xmlns:rdf    ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
                xmlns:rdfs   ="http://www.w3.org/2000/01/rdf-schema#"  
              
              >
              
              

              Es geht um den ( bzw. einen sauberen) Stil! Lern er den schlampig, wir er immer so arbeiten.

              Im Grunde hast du natürlich recht.

              See ya up the road,
              Gunnar

              --
              „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        2. Vielen lieben Dank Thomas. Ich habs hinbekommen. Der Code ist recht unsauber, ich weiß. Aber danke für die Tipps :)