XML Datei importieren die Integerwerte enthält

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

tanja
Beiträge: 2
Registriert: Mi, 14.02.2007 19:59

XML Datei importieren die Integerwerte enthält

Beitrag von tanja » Mi, 14.02.2007 20:36

Hallo,

ich möchte eine xml Datei mit unterschiedlichen Datentypen in OO Calc importieren. Dafür habe ich eine xsl Datei geschrieben. Der Datenimport funktioniert auch gut, allerdings werden alle Daten als Text interpretiert.

Aus einigen importierten Daten sollen später Diagramme erstellt werden.
Deshalb ist es notwendig, dass Integerwerte in der Importdatei auch als solche interpretiert/bzw deklariert werden.

Da liegt nun auch mein Problem:

Ausschnitt aus der xsl Datei:

Code: Alles auswählen

<table:table-cell><text:p>Antwort1</text:p></table:table-cell> 


Ich nehme mal an, dass

Code: Alles auswählen

<text:p></text:p> 
besagt, dass es sich um einen Char oder String handelt .

Meine Frage ist nun: Wie lautet die Entsprechung für Integer? Wenn es auch einen Datumstyp gibt, könnte ich den auch noch gut verwenden ;-)

Ich wäre sehr dankbar für Links mit den entsprechenden Infos, oder auch direkte Antworten.

Vielen Dank im Voraus für eure Hilfe

Tanja

hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: XML Datei importieren die Integerwerte enthält

Beitrag von hol.sten » Mi, 14.02.2007 22:34

tanja hat geschrieben:Meine Frage ist nun: Wie lautet die Entsprechung für Integer? Wenn es auch einen Datumstyp gibt, könnte ich den auch noch gut verwenden ;-)
Interessante Fragestellung. Zunächst hatte ich keine Antwort.

Ich habe daher folgendes gemacht: Eine Calc-Datei mit Zahlen von 1 bis 8 gespeichert. Eine Calc-Datei mit ein paar Geburtsdaten gespeichert. Beide Dateien kopiert, in *.zip umbenannt und mit einem ZIP-Packer entpackt.

Der mich interessierende Teil spielt sich jeweils in der content.xml ab.

Bei Zahlen arbeitet OOo mit den XML-Attributen 'office:value-type="float" office:value="1"' wobei "office:value" den tatsächlichen Wert enthält, der anschließend im <text:p>-Tag zu wiederholen ist.

Bei einem Datumstyp sieht das ganze ein wenig komplizierter aus. Hier fängt OOo zunächst mit verschiedenen <style:style>- und <number:date-style>-Tags in einem <office:automatic-styles>-Tag an. Anschließend müssen im <table>-Tag für die gewünschten Spalten <table:table-column>-Tags mit den gewünschten <style:style>-Tags definiert werden.

Da das ganz nicht wirklich trivial ist, nun ein Beispiel. Ich habe es mir nicht komplett selbst ausgedacht, sondern aus einem anderen Thread über das Thema XSLT-Filter übernommen und erweitert.

Hier nun zunächst meine XML-Datei, mit Beispieldaten (Zeichenketten: artist, album, track; Zahlen: year, Datum: released im Format YYYY-MM-DD):

Code: Alles auswählen

<?xml version="1.0"?>
<mp3tag>
 <file>
  <artist>Someone</artist>
  <album>My Life</album>
  <track>Here We Go</track>
  <year>2007</year>
  <released>2007-01-01</released>
 </file>
 <file>
  <artist>Somebody</artist>
  <album>Your Life</album>
  <track>Here We Play</track>
  <year>2006</year>
  <released>2006-03-03</released>
 </file>
 <file>
  <artist>Anybody</artist>
  <album>Our Life</album>
  <track>Sounds Good</track>
  <year>2005</year>
  <released>2005-10-01</released>
 </file>
</mp3tag>
Und nun mein XSLT-Filter, mit dem ich die obige Beispieldatei inklusive Formatierungen laden kann. Auch diese Datei habe ich nicht komplett selbst geschrieben, sondern nur für die Zahlen- und Datums-Spalten erweitert:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
   <office:automatic-styles>
    <style:style style:name="co1" style:family="table-column">
     <style:table-column-properties fo:break-before="auto" style:column-width="5.0cm"/>
    </style:style>
    <style:style style:name="ro1" style:family="table-row">
     <style:table-row-properties style:row-height="0.453cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
    </style:style>
    <style:style style:name="ta1" style:family="table" style:master-page-name="Default">
     <style:table-properties table:display="true" style:writing-mode="lr-tb"/>
    </style:style>
    <number:date-style style:name="N37" number:automatic-order="true">
     <number:day number:style="long"/>
     <number:text>.</number:text>
     <number:month number:style="long"/>
     <number:text>.</number:text>
     <number:year/>
    </number:date-style>
    <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N37"/>
   </office:automatic-styles>
   <office:body>
    <office:spreadsheet>
     <table:table>
      <table:table-column table:style-name="co1" table:number-columns-repeated="4" table:default-cell-style-name="Default"/>
      <table:table-column table:style-name="co1" table:default-cell-style-name="ce1"/>
      <table:table-row>
       <table:table-cell><text:p>artist</text:p></table:table-cell>
       <table:table-cell><text:p>album</text:p></table:table-cell>
       <table:table-cell><text:p>track</text:p></table:table-cell>
       <table:table-cell><text:p>year</text:p></table:table-cell>
       <table:table-cell><text:p>released</text:p></table:table-cell>
      </table:table-row>
      <xsl:for-each select="mp3tag/file">
       <table:table-row>
        <table:table-cell><text:p><xsl:value-of select="artist"/></text:p></table:table-cell>
        <table:table-cell><text:p><xsl:value-of select="album"/></text:p></table:table-cell>
        <table:table-cell><text:p><xsl:value-of select="track"/></text:p></table:table-cell>
        <table:table-cell office:value-type="float">
         <xsl:attribute name="office:value"><xsl:value-of select="year"/></xsl:attribute>
         <text:p><xsl:value-of select="year"/></text:p>
        </table:table-cell>
        <table:table-cell office:value-type="date">
         <xsl:attribute name="office:date-value"><xsl:value-of select="released"/></xsl:attribute>
         <text:p><xsl:value-of select="released"/></text:p>
        </table:table-cell>
       </table:table-row>
      </xsl:for-each>
     </table:table>
    </office:spreadsheet>
   </office:body>
  </office:document-content>
 </xsl:template>
</xsl:stylesheet>
Ich habe das ganz mit OOo 2.1.0 unter Windows XP getestet. Die Zahlen und die Release-Daten sind korrekt formatiert aus.

Regards
hol.sten

tanja
Beiträge: 2
Registriert: Mi, 14.02.2007 19:59

Beitrag von tanja » Fr, 16.02.2007 07:45

Hallo hol.sten,

vielen Dank für Deine Antwort. (Und Kompliment für die Vorgehensweise die Lösung zu finden - darauf muss man erstmal kommen ; ) )

Ich werde es gleich mit meinen Daten ausprobieren.

Grüße Tanja

hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Beitrag von hol.sten » Fr, 16.02.2007 18:16

tanja hat geschrieben:darauf muss man erstmal kommen
Ich hätte ja auch in die Dokumentation z. B. hier schauen können:
- http://books.evc-cit.info/
- http://www.oasis-open.org/committees/tc ... rev=office

Das erschien mir aber aufwändiger...
tanja hat geschrieben:Ich werde es gleich mit meinen Daten ausprobieren.
Viel Erfolg.

Regards
hol.sten

Antworten