[VB] XML uitlezen, Hoe ?

Pagina: 1
Acties:

  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Ik wil in VB een gedeelte uit hetvolgende .NITF document (gelijk aan .XML) lezen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 <?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE nitf SYSTEM "nitf-adjusted-13c.dtd">

<nitf>

<head>
<meta name="onlinefolder" content="/ANP/BIN"></meta>
<docdata>

<del-list><from-src src-name="sko"></from-src></del-list>

<urgency ed-urg="3"></urgency>
<date.issue norm="20000913 125127+0200"></date.issue>

<doc.copyright holder="EPA"></doc.copyright>


  <key-list>

  <keyword key="NAVO"></keyword>

  </key-list>

</docdata>
</head>
<body>
<body.head>
<hedline><hl1>Antonov donderdag onder de hamer</hl1></hedline>

<byline><person>Fehim Demir</person></byline>

</body.head>
<body.content>
<block>
<img-inst id="online">
<img-ref>a171231-00913.onlineBild.jpg</img-ref>
</img-inst>
</block>
<block>
<img-inst id="thumbnail">
<img-ref>a171231-00913.thumbnail.jpg</img-ref>
</img-inst>
</block>
<p>Een helicopter wordt in het Russische vrachtvliegtuig type Antonov geladen. In Veghel komt de Antonov 124,
 het vliegtuig dat sedert 1997 op Maastricht-Aachen Airport aan de ketting ligt, 
donderdag onder de hamer.De 300 ton wegende Antonov is een van de grootste vrachtvliegtuigen ter wereld. 
De nieuwwaarde bedraagt rond de 90 miljoen gulden. ANP-Foto</p>
</body.content>
</body>
</nitf>

het gaat om het stukje tekst "Antanov donderdag onder de hamer"

Ik weet dat ik deze tekst kan doorzoeken naar "<hedline><hl1>" en "</hl1></hedline>" en dan de tussenliggende string gebruiken, maar dat wil ik niet, want het zou dus mogelijk zijn dmv een XMLparser, maar ik kom er niet uit :(

Kan iemand mij een stukje code geven hoe ik dit voor elkaar krijg ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Methode 1 - lees het document in een DOM en browse door de DOM heen tot je er bent

Methode 2 - Maak een XPath expressie die naar die locatie wijst en gebruik een XPath engine (als die voor VB bestaat) om de waarde te vinden.

Methode 3 - Gebruik een simpele XSLT file om de tekst eruit te filteren.

Methode 2&3 zijn het makkelijkst. 3 is nogal een over-kill. 2 hangt af van de beschikbare tools voor VB.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Op maandag 24 september 2001 13:31 schreef mbravenboer het volgende:
Methode 1 - lees het document in een DOM en browse door de DOM heen tot je er bent
Hoe doe ik dit in VB ?

  • Arjan A
  • Registratie: November 2000
  • Laatst online: 15:21

Arjan A

Cenosillicafoob

Een referentie maken naar MSXML.DLL in VB, en dan het MS-XMLDOM eens goed bestuderen.

  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Op maandag 24 september 2001 14:17 schreef Arjan_A het volgende:
Een referentie maken naar MSXML.DLL in VB, en dan het MS-XMLDOM eens goed bestuderen.
De referentie is gemaakt naar MSXML v.3...

waar kan ik een beetje basic uitleg krijgen van MS-XMLDOM ?

  • tus
  • Registratie: November 2000
  • Laatst online: 05-07-2012

tus

Makkelijkst is gebruik maken van XLS.

Maak een xls file met dit erin:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">
<xsl:value-of select="//hedline"/>
</xsl:template>

</xsl:stylesheet>

Pleur daarna dit in je VBCode:

Dim xlm As DOMDocument
Dim xsl As DOMDocument

Set xlm = New DOMDocument
Set xsl = New DOMDocument

xlm.Load ("D:\XMLExamples\forum.xml")
xsl.Load ("D:\XMLExamples\forum.xsl")
MsgBox xlm.transformNode(xsl)

Je kan ook n html pagina maken met dit erin:
<html>
<body>
<script type="text/javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("bestand.xml")

// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("bestand.xsl")

// Transform
document.write(xml.transformNode(xsl))
</script>

</body>
</html>

----------------
Het werkt beide op dezelfde manier.
Suc6

  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Op maandag 24 september 2001 14:50 schreef Tus aardig wat regels code
Bedankt, maar als ik dat doe dan krijg ik een lege string terug :?
Is het XSL gedeelte wel goed ?

  • tus
  • Registratie: November 2000
  • Laatst online: 05-07-2012

tus

Ik had deze regel weggehaald uit de Xml file. Toen werkte het bij mij. Misschien dat je dat kan proberen.

<!DOCTYPE nitf SYSTEM "nitf-adjusted-13c.dtd">

Suc6

  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Op maandag 24 september 2001 15:42 schreef Tus het volgende:
Ik had deze regel weggehaald uit de Xml file. Toen werkte het bij mij. Misschien dat je dat kan proberen.

<!DOCTYPE nitf SYSTEM "nitf-adjusted-13c.dtd">

Suc6
gedaan, maar nog steeds niks....

welke versie MSXML heb jij, bij mij staat ie op 3, ik het document staat 1 maar dat is toch gewoon 'backwards compatible' :?

  • tus
  • Registratie: November 2000
  • Laatst online: 05-07-2012

tus

Ik heb nog slechts versie 2 ;)

Maar enige manier om dit op te lossen is te gaan. Debuggen. Zet een breakpoint op xml.Load( "bestand.xml" )
Druk dan op F8 (een stapje verder)

Ga dan naar je Watch Window en kijk wat er staat in xml
Klap het zover open totdat je die hedline ziet. Als je nix ziet dan weet je dus dat het loaden verkeerd is gegaan.

Ik ben nu klaar met werken dus ik kan niet meer replyen. Lees morgen wel of het gelukt is.

Suc6

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Tus:<xsl:value-of select="//hedline"/>
Probeer eens
code:
1
select="/nitf/body/body.head/hedline/hl1/text()"

Dit is een stukje efficienter en duidelijker en minder foutgevoelig :) . De eerste select van tus levert het hl1 elementen. hedline zelf bevatte geen tekst in dit geval.

Je kan het eventueel ook gewoon testen in je browser.
Dit is dus trouwens methode 3 :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 16:06
Afbeeldingslocatie: http://www.sassiessite.f2s.com/images/Smilies/thumbsup.gif tus en mbravenboer bedankt ! Afbeeldingslocatie: http://www.sassiessite.f2s.com/images/Smilies/thumbsup.gif

Het werkt !!

Ik had hem eerst op versie 2 gezet, daarna werkte hij wel, maar alleen als ik
<!DOCTYPE nitf SYSTEM "nitf-adjusted-13c.dtd"> verwijderd had.

Met de aanpassing van mbravenboer werkt hij met versie 3 en zonder aanpassingen van m'n NITF doc :) :)

  • tus
  • Registratie: November 2000
  • Laatst online: 05-07-2012

tus

Ah, fijn om op de vroege ochtend te lezen dat het gelukt is.
Ik ben alleen nog n beetje :z:z
Pagina: 1