[XML/SQL2000] XML: schema voor inlezen

Pagina: 1
Acties:

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 26-05 15:42

Altaphista

1. check manual, 2. ask

Topicstarter
edit: ik zie het alweer, de vraag is te moeilijk ongewoon/vaag :) ... ik ga voor de 0 replies :/ :'(

Een vraagje over een schemabestand voor het 'dumpen' van een XML bestand naar een tabel.
Nu heb ik een Data en Schema bestand gedefinieerd (beide zijn .xml) om deze, met behulp van de commando "EXEC @hr = sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkLoad.3.0', @object OUT" (in een stored proc) te 'mappen/dumpen' naar/in een tabel, namelijk Tabel1. Zie hieronder.
met een simpelere XML bestand is het me al gelukt, maar ik moet een uitgebreider bestand kunnen inlezen ... :'(

Neem het volgende XML (data) bestand:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
<a>
 <b>
  <c>
   <d>
     <e>waarde1</e>
     <f>waarde2</f>
     <g>
       <h>waarde3</h>
       <i>waarde4</i>
     </g>
     <j>waarde5</j>
   </d>
  </c>
 </b>
</a>


En de schema bestand:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<Schema xmlns="urn:schemas-microsoft-com:xml-data" 
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
...
<ElementType name="a" content="eltOnly" sql:is-constant="1">
  <element type="b"/>
</ElementType>
<ElementType name="b" content="eltOnly" sql:is-constant="1">
  <element type="c"/>
</ElementType>
<ElementType name="c" content="eltOnly" sql:is-constant="1">
  <element type="d"/>
</ElementType>     
<ElementType name="d" sql:relation="Table1">
  <element type="e"  sql:field="column1"/>
  <element type="f"  sql:field="column2"/>

  ----> ??? <----

</ElementType>
...


Nu wil ik de waarde binnen de tags <h></h> en <i></i> ook in dezelfde tabel hebben (niet in een 2e tabel), omdat ze gerelateerd zijn aan dezelfde item.
De vraag is hoe ik dat doe? (op de plaats van de ??? ?)

Onderstaande schema werkt niet, er komt dan NULL in de tabel te staan voor waarden column3 en 4 :| :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ElementType name="a" content="eltOnly" sql:is-constant="1">
  <element type="b"/>
</ElementType>
<ElementType name="b" content="eltOnly" sql:is-constant="1">
  <element type="c"/>
</ElementType>
<ElementType name="c" content="eltOnly" sql:is-constant="1">
  <element type="d"/>
</ElementType>     
<ElementType name="d" sql:relation="Table1">
  <element type="e"  sql:field="column1"/>
  <element type="f"  sql:field="column2"/>
  <element type="g"/>
</ElementType>
<ElementType name="d" sql:relation="Table1">
  <element type="h"  sql:field="column3"/>
  <element type="i"  sql:field="column4"/>
</ElementType>


Alle tips/voorbeelden/commentaar welkom! Thnx :)

[ Voor 68% gewijzigd door Altaphista op 05-01-2004 13:37 ]

Je gaat het pas zien als je het doorhebt.


  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 22-04 10:47
Jammer dan, niet de 0 gehouden ;)

Wat zou er op tegen zijn om het bestand in meerdere tabellen in te lezen en met een volgende stored procedure samen te voegen?

Er is weinig bekend over het object dat je gebruikt. Is dit het enige component dat hiervoor geschikt is? Het lijkt me dat XML toch op meerdere manieren ingelezen moet kunnen worden in SQL server...

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 26-05 15:42

Altaphista

1. check manual, 2. ask

Topicstarter
El_BingO schreef op 06 januari 2004 @ 09:38:
Jammer dan, niet de 0 gehouden ;)

Wat zou er op tegen zijn om het bestand in meerdere tabellen in te lezen en met een volgende stored procedure samen te voegen?

Er is weinig bekend over het object dat je gebruikt. Is dit het enige component dat hiervoor geschikt is? Het lijkt me dat XML toch op meerdere manieren ingelezen moet kunnen worden in SQL server...
:P

Als het een paar tabellen zou worden, ok, maar het worden er te veel. Het is me trouwens wel gelukt met het object, een XML-data file en een bijbehoren schema om alles werkend te krijgen.

Als iemand een andere methode weet om (grote) XML files (op schijf) in te lezen via SQL server en te converteren naar 1 tabel, post it here, please! :)

- Ik heb BULK INSERT reeds geprobeerd. Probleem daarbij: het worden tienduizenden records, hoe krijg ik het dan weer in de juiste vorm om te verwerken :?
- Ik heb een ActiveX script (DTS Package) ook geprobeerd: probleem is dat je met ReadLine moet werken, en mijn XML-file is grootte > 5Mb en bestaat uit 1 regel :|
- ik heb dus de bulkloader-methode ook geprobeerd, maar loop tegen conversie/mappingprobleem op...

Je gaat het pas zien als je het doorhebt.


  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 22-04 10:47
Altaphista schreef op 06 januari 2004 @ 09:47:
Als iemand een andere methode weet om (grote) XML files (op schijf) in te lezen via SQL server en te converteren naar 1 tabel, post it here, please! :)
Suggestie:
kijk hier eens? Heb je dit al geprobeerd?

  • Shir
  • Registratie: November 2000
  • Laatst online: 25-11-2025
Gokje hoor:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ElementType name="a" content="eltOnly" sql:is-constant="1">
  <element type="b"/>
</ElementType>
<ElementType name="b" content="eltOnly" sql:is-constant="1">
  <element type="c"/>
</ElementType>
<ElementType name="c" content="eltOnly" sql:is-constant="1">
  <element type="d"/>
</ElementType>     
<ElementType name="d" sql:relation="Table1">
  <element type="e"  sql:field="column1"/>
  <element type="f"  sql:field="column2"/>
  <element type="g">
    <element type="h"  sql:field="column3"/>
    <element type="i"  sql:field="column4"/>
  </element>
</ElementType>

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 26-05 15:42

Altaphista

1. check manual, 2. ask

Topicstarter
Hehehe :)
dat had ik ook al geprobeerd, maar gaat niet werken. Geeft een error in de opmaak van je schema file.

Je gaat het pas zien als je het doorhebt.

Pagina: 1