Avatar billede iandk Nybegynder
20. februar 2006 - 13:24 Der er 10 kommentarer og
1 løsning

Hjælp til at udtrække felter fra XML fil til flad fil

Hej,

Jeg har lidt problemer med at udtrække data fra en XML fil jeg har fået. Jeg har bl.a. prøvet forskellige eksterne programmer, men har stadig problemer med felterne som hedder f.eks. resource type = "homepage" ? og også f.eks. country og type felterne...

Det sidste jeg nu har prøvet er at hente xml2flat.exe fra unidex.com, da jeg ikke kender noget til XML og blot gerne vil have trukket nogle data ud en gang for alle - og der kan jeg se at man skal lave en xfl fil - den mangler jeg så at få lavet ? Eller naturligvis en anden måde at få trukket mine data ud på :o)

En stump af min XML fil ser sådan her ud

<?xml version="1.0"?>
<hotspots>
  <hotspot id="7710" country="DK" type="Private" name="test">
      <ssid>mynetwork</ssid>
      <name>test navn</name>
      <capability name="vpn" value="true"/>
      <capability name="vmc" value="true"/>
      <location>
        <address01>ringgade 2</address01>
        <address02></address02>
        <region>Jylland</region>
        <city>Holstebro</city>
        <street>ringgade</street>
        <housenumber>2</housenumber>
        <zipcode>7500</zipcode>
      </location>
      <resource type="homepage">www.eksperten.dk</resource>
      <resource type="phone">+45 87654321</resource>
      <resource type="fax">12345678</resource>
      <resource type="location">empty</resource>
      <description>MISC</description>
  </hotspot>
</hotspots>

Det skal siges der er mange poster i xml filen og dem har jeg ni af, som jeg skal have over i en Access database, men mangler blot hjælpe fra xml til flad fil :o)

Glæder mig til at høre fra jer - og på forhånd tusind tak !
Avatar billede falster Ekspert
20. februar 2006 - 14:54 #1
Kender heller ikke så meget til xml.

Men kan du ikke åbne den - f.eks. - i Excel, og så gemme som - ligeledes f.eks. - som csv.

Dit eksempel bliver som nedenstående. Åbnet i Excel er det da en meget pæn tabel efter min mening:

/hotspots;;;;;;;;;;;;;;;;;;;
/hotspot/@country;/hotspot/@id;/hotspot/@name;/hotspot/@type;/hotspot/capability/@name;/hotspot/capability/@value;/hotspot/description;/hotspot/location/address01;/hotspot/location/address02;/hotspot/location/city;/hotspot/location/housenumber;/hotspot/location/housenumber/#agg;/hotspot/location/region;/hotspot/location/street;/hotspot/location/zipcode;/hotspot/location/zipcode/#agg;/hotspot/name;/hotspot/resource;/hotspot/resource/@type;/hotspot/ssid
DK;7710;test;Private;vpn;true;MISC;ringgade 2;;Holstebro;2;2;Jylland;ringgade;7500;7500;test navn;;;mynetwork
DK;7710;test;Private;vmc;true;MISC;ringgade 2;;Holstebro;2;;Jylland;ringgade;7500;;test navn;;;mynetwork
DK;7710;test;Private;;;MISC;ringgade 2;;Holstebro;2;;Jylland;ringgade;7500;;test navn;www.eksperten.dk;homepage;mynetwork
DK;7710;test;Private;;;MISC;ringgade 2;;Holstebro;2;;Jylland;ringgade;7500;;test navn;+45 87654321;phone;mynetwork
DK;7710;test;Private;;;MISC;ringgade 2;;Holstebro;2;;Jylland;ringgade;7500;;test navn;12345678;fax;mynetwork
DK;7710;test;Private;;;MISC;ringgade 2;;Holstebro;2;;Jylland;ringgade;7500;;test navn;empty;location;mynetwork
Avatar billede Slettet bruger
20. februar 2006 - 15:15 #2
Vis mig hvordan du har tænkt dig den flade version af ovenstående data skal se ud, og så skal jeg lave et XSLT stylesheet til dig, som du kan bruge sammen med en XSLT processor (Google "xslt.exe")

/CS
Avatar billede iandk Nybegynder
20. februar 2006 - 17:22 #3
hej greystate,

jeg vil såmænd bare gerne have dem i f.eks. en kommaseperet fil direkte til at importere i access, men husk jeg skal have felterne homepage,phone,fax,location samt country og type med i udtrækket.

håber ikke jeg stiller for store krav, men det lyder til at du ved hvad det drejer sig om...

Falster, jeg får ikke de fire resource type felter med når jeg åbner i Excel.

;o)
Avatar billede iandk Nybegynder
20. februar 2006 - 17:28 #4
den flade tekstfil kunne feks se ud som Falsters eksempel blot med alle felterne i naurligvis... Jeg ser stadig "resource type" felterne som udfordringen...
Avatar billede Slettet bruger
21. februar 2006 - 00:02 #5
Gør lige dig selv den store tjeneste at åbne Excel, og tag så et print af dit XML eksempel. Start i øverste venstre hjørne af regnearket og overfør feltnavne til hele række 1 i regnearket, ud fra felterne i XML filen - her har du begyndelsen:

id      country      type    name    ssid      name <----- UPS hvad sker der lige der??? (Man kan ikke have to felter i CSV med samme navn)

Det er derfor jeg foreslår dig lige at tænke den ene XML post igennem, og lave det output du forventer - og når du har fået den ind i Access, så dump CSV filen her, og jeg skal lave noget XSLT til dig.

/CS
Avatar billede falster Ekspert
21. februar 2006 - 09:20 #6
OK. Hos mig er der nedenstående. Men greystates er et virkelig godt "tabelråd".

/hotspot/resource    /hotspot/resource/@type
www.eksperten.dk    homepage
+45 87654321            phone
12345678            fax
empty                    location
Avatar billede iandk Nybegynder
21. februar 2006 - 15:44 #7
Det ser ud til at der står det samme i de to name felter i de XML filer jeg har fået, så der burde ikke være noget i vejen for at droppe det ene name felt. Jeg ser dog stadig resource type felterne som problemet, for som falster også skriver, så kommer de fire resourcer til at stå på nedenstående linier i hver post. Men jeg kan dog nævne at de felter jeg gerne vil have ud er:
id, country, type, name, ssid, address01, address02, region, city, street, housenumber, zipcode, homepage, phone, fax, location og description.

Håber det giver lidt mere...
Avatar billede iandk Nybegynder
27. februar 2006 - 22:00 #8
Ikke nogle forslag ?
Avatar billede Slettet bruger
27. februar 2006 - 22:37 #9
Jeg skal prøve at bikse noget sammen i løbet af iaften :-)

/CS
Avatar billede iandk Nybegynder
28. februar 2006 - 09:29 #10
Glæder jeg mig til :o)
Avatar billede Slettet bruger
09. marts 2006 - 23:37 #11
Hejsa - beklager ventetiden...

Dette XSLT stylesheet klarer ærterne for dig:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
    <xsl:output method="text" />
   
    <xsl:variable name="field-separator" select="','" />
    <xsl:variable name="line-separator" select="'&#x0D;&#x0A;'" />
   
    <xsl:template match="/">
        <xsl:call-template name="outputHeaders" /><xsl:value-of select="$line-separator" />
        <xsl:apply-templates select="hotspots/hotspot" />
    </xsl:template>
   
    <xsl:template match="hotspot">
        <xsl:apply-templates select="@* | *" />
    </xsl:template>
   
    <xsl:template match="hotspot/*">"<xsl:apply-templates />"<xsl:if test="not(name() = 'description')"><xsl:value-of select="$field-separator" /></xsl:if></xsl:template>
    <xsl:template match="hotspot/@*">"<xsl:value-of select="." />"<xsl:value-of select="$field-separator" /></xsl:template>
    <xsl:template match="location/* | hotspot/resource">"<xsl:value-of select="." />"<xsl:value-of select="$field-separator" /></xsl:template>
   
    <xsl:template match="hotspot/location"><xsl:apply-templates select="*" /></xsl:template>
   
<!-- Felter der IKKE skal med ud får en tom template -->
    <xsl:template match="hotspot/capability" />
    <xsl:template match="hotspot/@name" />
   
<!-- Skriv headerne ud, hvis de skal bruges -->
    <xsl:template name="outputHeaders" xml:space="preserve">id,country,type,ssid,name,address01,address02,region,city,street,housenumber,zipcode,homepage,phone,fax,location,description</xsl:template>

</xsl:stylesheet>

Hvis du mangler hjælp til at udføre transformationen må du lige skrive igen, eller Google efter f.eks. "xslt.exe"

/CS
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester