Announcement

Collapse
No announcement yet.

Daten von Tabellen ablesen und prüfen???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daten von Tabellen ablesen und prüfen???

    Ich schon wieder. Tut mir leid. Noch eine Frage.

    Also eine Tabelle hat Zellen, in der Information steht. Ich muss für jede Zeile prüfen, welche Spalte einen Wert hat und danach den String aufbauen. Sobald man eine Zeile hat müsste man das nur noch mit der Iteration zusammenbringen. Helfen da vielleicht Funktionen weiter? Beispiel Funktion prüfe Zeile und baue String zusammen, nimm nächste Zeile und konkateniere über | mit dem nächsten String. Der Output der Funktion ist dann der Superstring.

    Wie kann man das am leichtesten machen?

    Damit wäre mir übelst viel geholfen.
    Danke für die große Mühe,
    Tamer
    Zuletzt editiert von Tamer; 17.11.2009, 17:31.

  • #2
    So geht das schonmal nicht :-(

    Also so geht das schonmal nicht :-(

    Mein Algorithmus in Pseudo-Code:

    1. Globale Variablendefinition: cell_one, cell_three, cell_five, cell_seven, rowString, finalString
    2. Für jede Zeile (mit der Bedingung > 1, weil den Header brauch ich nicht) soll folgendes gemacht werden:

    3. Prüfe, ob Wert bei cell_one vorhanden ist?
    Wenn ja, dann hol dir den String und schreibe das Ergebnis in globale Variable cell_one. (Die Spalten 2,4,6,8 sind jeweils die Abstände. Die werden automatisch, wenn cell_one vorhanden ist, mitgenommen)

    4. Mache das auch für die anderen Variablen

    5. Schreibe die Ergebnisse aller Variablen in die Variable RowString. Das ist dann ein langer String wo die cell_one bis cell_seven mit and verknüpft werden.

    6. Wenn ein Wert in RowString geschrieben wird, wird er beim ersten mal auch in die Variable finalString geschrieben. Beim zweiten mal aber wird der Wert mit concat | Variable verbunden.
    Also es entsteht ein langer String der mit | Querstrich verknüpft ist.

    7. Dieser lange String finalString wird dann zum Schluss in das for-each eingefügt. FERTIG :-)

    Hauptproblem:

    Das mit der Globalen Variablendefinition klappt zwar, aber ich kann sie dann nicht mehr ändern, bzw. die Variable überschreiben.

    Kann mir jemand helfen?

    Alles was mit xslt: Namespace ist, wird mit der alias Funktion zu xsl. Es soll nämlich zum Schluss ein XSLT entstehen.

    Dazu habe ich hier noch Namespaces. Soll jetzt nicht weiter irreführen.

    Hintergrund:
    Es werden von einer Tabelle Werte entnommen, falls sie vorhanden sind. Diese werden dann zu einem langen String gebaut und dann dieser String wird dann in eine for-each Funktion eingefügt.

    Klingt irgendwie einfach. Aber naja :-(

    Code:
    				<xslt:copy>
    					<xslt:apply-templates select="@*"/>
    					<!-- Zum Schluss wird der String hier eingefügt. Hier könnte es zum Problem kommen, wegen dem Namespace xslt und der Variablen weil ich ja das mit dem Alias verwende -->
    					<xslt:for-each select="{$rowString}">
    						<xslt:sort select="@left" data-type="number"/>
    .....
    Zuletzt editiert von Tamer; 16.11.2009, 18:46.

    Comment


    • #3
      Mein neuer Versuch ist schon vielversprechend

      ich komm aber jetzt nicht weiter :-( Dateien als Anhang

      nicht erschrecken wegen den Namespaces. Also was ich geschafft habe, ist dass bei jeder neuen Zeile der String aufgebaut wird.
      Was ich jetzt nur nicht hinbekomme ist, dass die einzelnen Ergebnisse zusammen ein String ergeben. Ich bekomme immer nur ein String. Und die Variable soll überschrieben werden mit dem Concatenierten Ergebnis.

      Ist mein Ansatz gut???? oder total daneben??????????????

      Code:
      <?xml version="1.0"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:rdfa="http://docs.oasis-open.org/opendocument/meta/rdfa#" xmlns:rpt="http://openoffice.org/2005/report" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2">
      	<xsl:output method="xml" encoding="ISO-8859-1"/>
      	<xsl:template name="globalParam">
      		<xsl:param name="cell_one"/>
      		<xsl:param name="cell_three"/>
      		<xsl:param name="cell_five"/>
      		<xsl:param name="cell_seven"/>
      		<xsl:param name="rowString">
      			<xsl:text>text[</xsl:text>
      			<xsl:if test="$cell_one">
      				<xsl:text>and</xsl:text>
      				<xsl:value-of select="$cell_one"/>
      			</xsl:if>
      			<xsl:if test="$cell_three">
      				<xsl:text>and</xsl:text>
      				<xsl:value-of select="$cell_three"/>
      			</xsl:if>
      			<xsl:if test="$cell_five">
      				<xsl:text>and</xsl:text>
      				<xsl:value-of select="$cell_five"/>
      			</xsl:if>
      			<xsl:if test="$cell_seven">
      				<xsl:text>and</xsl:text>
      				<xsl:value-of select="$cell_one"/>
      			</xsl:if>
      			<xsl:text>]</xsl:text>
      		</xsl:param>
      		<xsl:param name="rowStringWithoutAnd" select="concat('text[','',substring-after($rowString,'and'))"/>
      		<xsl:param name="finalRowString" select="concat($rowStringWithoutAnd,' | ','')"/>
      		<xsl:value-of select="$rowString"/>
      		<xsl:text>
      </xsl:text>
      		<xsl:value-of select="$rowStringWithoutAnd"/>
      		<xsl:text>
      </xsl:text>
      		<xsl:value-of select="$finalRowString"/>
      		<xsl:text>
      </xsl:text>
      	</xsl:template>
      	<xsl:template match="/">
      		<!-- Für jede Zeile soll > 1 (Header wird nicht gebraucht) soll folgendes gemacht werden -->
      		<xsl:for-each select="office:document-content/office:body/office:spreadsheet/table:table[@table:name='Tabelle1']/table:table-row[position()&gt;1]">
      			<!-- Es wird überprüft ob Wert vorhanden ist -->
      			<xsl:if test="table:table-cell[1]/text:p">
      				<xsl:call-template name="globalParam">
      					<xsl:with-param name="cell_one">
      						<xsl:text>@left&gt;number(text[.='</xsl:text>
      						<xsl:value-of select="table:table-cell[1]/text:p"/>
      						<xsl:text>/@left])</xsl:text>
      						<!-- Hier wird der Wert der zweiten Spalte miteingefügt -->
      						<xsl:value-of select="table:table-cell[2]/text:p"/>
      					</xsl:with-param>
      				</xsl:call-template>
      				<xsl:value-of select="$cell_one"/>
      			</xsl:if>
      			<!-- Analog -->
      			<xsl:if test="table:table-cell[3]/text:p">
      				<xsl:call-template name="globalParam">
      					<xsl:with-param name="cell_three">
      						<xsl:text>@left&lt;number(text[.='</xsl:text>
      						<xsl:value-of select="table:table-cell[3]/text:p"/>
      						<xsl:text>/@left])</xsl:text>
      						<xsl:value-of select="table:table-cell[4]/text:p"/>
      					</xsl:with-param>
      				</xsl:call-template>
      			</xsl:if>
      			<xsl:if test="table:table-cell[5]/text:p">
      				<xsl:call-template name="globalParam">
      					<xsl:with-param name="cell_five">
      						<xsl:text>@top&gt;number(text[.='</xsl:text>
      						<xsl:value-of select="table:table-cell[5]/text:p"/>
      						<xsl:text>/@top])</xsl:text>
      						<xsl:value-of select="table:table-cell[6]/text:p"/>
      					</xsl:with-param>
      				</xsl:call-template>
      			</xsl:if>
      			<xsl:if test="table:table-cell[7]/text:p">
      				<xsl:call-template name="globalParam">
      					<xsl:with-param name="cell_seven">
      						<xsl:text>@top&lt;number(text[.='</xsl:text>
      						<xsl:value-of select="table:table-cell[7]/text:p"/>
      						<xsl:text>/@top])</xsl:text>
      						<xsl:value-of select="table:table-cell[8]/text:p"/>
      					</xsl:with-param>
      				</xsl:call-template>
      			</xsl:if>
      		</xsl:for-each>
      	</xsl:template>
      </xsl:stylesheet>
      Attached Files
      Zuletzt editiert von Tamer; 16.11.2009, 18:52.

      Comment

      Working...
      X