[ASP / XML] - Hoe te zien of een bepaalde node bestaat?

Pagina: 1
Acties:

  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Als je een XML bestand hebt als volgt:

code:
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="ISO-8859-1"?>
<Boeken>
<Boek>
<Auteur>Blabla</Auteur>
<Titel>Blabla</Titel>
</Boek>
<Boek>
<Auteur>Blabla</Auteur>
</Boek>
</Boeken>


Als nou een bepaald boek bijvoorbeeld geen titel heeft zoals in het de tweede boeknode hierboven(belachelijk maar voor het voorbeeld), hoe kan ik dat dan herkennen?

Als ik deze namelijk dan opvraag d.m.v.
code:
1
xmlDoc.selectSingleNode("/Boeken/Boek/Titel").nodeTypedValue

geeft dit een foutmelding omdat deze node dan niet bestaat.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


Verwijderd

Zoiets wellicht:
ASP.NET Visual Basic:
1
2
3
4
if (xmlDoc.selectSingleNode("/Boeken/Boek/Titel") != Null)
    'joepie, hij bestaat!
    strThatDarnValue = xmlDoc.selectSingleNode("/Boeken/Boek/Titel").nodeTypedValue
endif

Enjoy :)

Edit:
Ach, het idee was juist, de syntax bagger ... Ik zei niet voor niets "zoiets" ;) Waar ik op doelde was dat, als je XPath query geen node oplevert, er geen object wordt teruggegeven, dus een null / nothing return geeft.

En natuurlijk kan het nooit een boolean opleveren, want een boolean heeft geen .nodeTypedValue attribuut ;) Zie ook de documentatie, vooral de return value:
Parameters
queryString: A string specifying an XPath expression.

Return Value
An object. Returns the first node that matches the given pattern-matching operation. If no nodes match the expression, returns a null value.

[ Voor 93% gewijzigd door Verwijderd op 11-11-2005 02:58 ]


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Nope werkt niet. Ik heb het dan als volgt gedaan:
code:
1
If Not IsNull(xmlDoc.selectSingleNode("/Boeken/Boek/Titel").nodeTypedValue) Then

maar dit mag niet omdat die node dus niet bestaat.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Nutcaze schreef op vrijdag 11 november 2005 @ 00:51:
Nope werkt niet. Ik heb het dan als volgt gedaan:
code:
1
If Not IsNull(xmlDoc.selectSingleNode("/Boeken/Boek/Titel").nodeTypedValue) Then

maar dit mag niet omdat die node dus niet bestaat.
je test hier of je een eigenschap van een niet bestaande node kan opvragen, maar je moet juist testen of de node uberhaupt bestaat ;) Het is wel zo dat als de node niet bestaat er dan ook geen eigeschappen van deze node bestaan, maar toch zou ik dat nodeTypedValue sowieso weglaten (ik denk dat het idd uitmaakt)


Edit:
de selectSingleNode geeft afaik een boolean terug, je zou het dus ook met een simpele Not kunnen proberen ipv Not isNull
beetje in de war met een andere methode :|

edit:
let er wel op dat je het goede boek pakt en niet het eerste. wellicht dat het zoiets moet worden voor jouw voorbeeld (ok, ik snap dat je er in real-world met een lus doorheen gaat lopen, maar toch)
Visual Basic:
1
  If Not isNull(xmlDoc.selectSingleNode("/Boeken/Boek[2]/Titel")) Then

[ Voor 56% gewijzigd door wizzkizz op 11-11-2005 01:11 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Je had gelijk, ik had niet goed gelezen MAAR...hij werkt nog steeds niet.
code:
1
If Not IsNull(xmlDoc.selectSingleNode("/Boeken/Boek/Titel")) Then

is kennelijk nog steeds geldig? Hij loopt er namelijk gewoon nog steeds in...

Edit: ook If Not zonder de IsNull() werkt niet. Hij loopt er nog steeds in.

[ Voor 17% gewijzigd door Nutcaze op 11-11-2005 01:06 ]

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Nutcaze schreef op vrijdag 11 november 2005 @ 01:02:
Je had gelijk, ik had niet goed gelezen MAAR...hij werkt nog steeds niet.
code:
1
If Not IsNull(xmlDoc.selectSingleNode("/Boeken/Boek/Titel")) Then

is kennelijk nog steeds geldig? Hij loopt er namelijk gewoon nog steeds in...
zie mijn edit over de return van selectSingleNode je gebruikte XPath

[ Voor 10% gewijzigd door wizzkizz op 11-11-2005 01:10 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
wizzkizz schreef op vrijdag 11 november 2005 @ 01:05:
[...]

zie mijn edit over de return van selectSingleNode je gebruikte XPath
?? XPath? Anyway ik heb het goede boek te pakken want ik test namelijk maar met 1 node. Wat ik doe, de conditie blijft kennelijk True retourneren.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Nutcaze schreef op vrijdag 11 november 2005 @ 01:12:
[...]


?? XPath? Anyway ik heb het goede boek te pakken want ik test namelijk maar met 1 node. Wat ik doe, de conditie blijft kennelijk True retourneren.
kun je dan even de relevante code neerzetten hoe je het doet?

btw, XPath is de gebruikte methode om de juiste node binnen je XML document te selecteren, wat je hier als argument aan selectSingleNode meegeeft.

[ Voor 6% gewijzigd door wizzkizz op 11-11-2005 01:16 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
code:
1
2
3
4
5
6
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.load(Server.MapPath("\") & "\temp\boeken.xml")
If Not IsNull(xmlDoc.selectSingleNode("/Boeken/Boek/Titel")) Then
Response.Write("blabla")
End If
Set xmlDoc = Nothing


Met als boeken.xml:
code:
1
2
3
4
5
6
<?xml version="1.0" encoding="ISO-8859-1"?>
<Boeken>
<Boek>
<Auteur>Blabla</Auteur>
</Boek>
</Boeken>


Deze code zorgt er gewoon voor dat er "blabla" wordt weggeschreven. Als ik over selectSingleNode lees retourneert deze inderdaad een Boolean maar het werkt toch niet zo kennelijk.

Oh ja en als je 'm als Boolean gaat behandelen krijg je: Object variable not set

[ Voor 20% gewijzigd door Nutcaze op 11-11-2005 01:33 ]

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Dit werkt bij mij wel

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.load( "boeken.xml" )
    
    Set Node = xmlDoc.selectSingleNode( "/Boeken/Boek/Titel" )
        If ( Not Node Is Nothing ) Then
            Response.Write Node.nodeTypedText
        Else
            Response.Write "node not found"
        End If
    Set Node = Nothing
    
Set xmlDoc = Nothing


* wizzkizz kijkt op zn horloge, schrikt en jumpt in bed ;)

[ Voor 16% gewijzigd door wizzkizz op 11-11-2005 01:43 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Werkt bij mij inderdaad ook. Je wordt bedankt! Zo een gek*** om het goed te krijgen.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-04 12:54

Jaspertje

Max & Milo.. lief

Een andere misschien net iets minder mooie oplossing is de volgende (maar hij werkt wel :))
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") 
    xmlDoc.load( "boeken.xml" ) 
     
    Set Node = xmlDoc.SelectNodes( "/Boeken/Boek/Titel" ) 
        If node.length > 0 Then 
            Response.Write Node.nodeTypedText 
        Else 
            Response.Write "node not found" 
        End If 
    Set Node = Nothing 
     
Set xmlDoc = Nothing

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Jaspertje schreef op vrijdag 11 november 2005 @ 08:30:
Een andere misschien net iets minder mooie oplossing is de volgende (maar hij werkt wel :))
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") 
    xmlDoc.load( "boeken.xml" ) 
     
    Set Node = xmlDoc.SelectNodes( "/Boeken/Boek/Titel" ) 
        If node.length > 0 Then 
            Response.Write Node.nodeTypedText 
        Else 
            Response.Write "node not found" 
        End If 
    Set Node = Nothing 
     
Set xmlDoc = Nothing
ja, werkt vast wel, maar waarom grotere objecten aanmaken dan nodig is? kost alleen maar meer geheugen ;)

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.

Pagina: 1