Discussion:
XMLDOM / Conditional Check for Object fails
(too old to reply)
joe
2005-05-31 18:23:28 UTC
Permalink
I am having problems checking for the value of an XMLDOM object .

Lets say my XMLDOM object was successfully created as objXMLDoc, and that
has several nodes on it. In the case of a VBScript loop like below:

'-------------------
For x = 1 To 10

Set oItemPrice = objXMLDoc.selectSingleNode("//Item[x]/Price")

'--- conditional stuff that fails here

Next
'-------------------

some of the Items don't have a price, therefore the object oItemPrice will
fail at some point. So I want to check for this failure, but everything I do
gives me errors.
Examples:

1. If not oItemPrice Then
2. If oItemPrice.lenght = 0 Then
3. If oItemPrice = empty or oItemPrice = "" or isnull(oItemPrice) Then
4. If not (oItemPrice) Then

I really don't know what to do. Most errors are like:
" Object doesn't support this property or method"

Any help is appreciated.
joe
2005-05-31 18:32:53 UTC
Permalink
With JScript one can just go:

oItemPrice = xmlDoc.selectSingleNode("//Item["+x+"]/Price");

if (oItemPrice) { ...do stuff }
else {...do other stuff}

but because my XMLDOM code must go inside VBScrip pages, I have to figure
the other one out.
I tried to mix both languages up and ended up with even more problems.
Post by joe
some of the Items don't have a price, therefore the object oItemPrice will
fail at some point. So I want to check for this failure, but everything I do
gives me errors.
1. If not oItemPrice Then
2. If oItemPrice.lenght = 0 Then
3. If oItemPrice = empty or oItemPrice = "" or isnull(oItemPrice) Then
4. If not (oItemPrice) Then
Mark Schupp
2005-05-31 19:23:00 UTC
Permalink
try this:

If Not IsDomTextNode( oItemPrice) Then
...

'check if selectSingleNode returned a valid text node
Function IsDomTextNode( ByRef objNode )

Dim strTmp

On Error Resume Next
strTmp = objNode.text

If Err.Number = 0 Then
IsDomTextNode = True
Else
IsDomTextNode = False
End If

End Function

You should also be able to use the nodeType property of the node to see if
it is the type you expect. I can't remember why I used to above approach.
--
--Mark Schupp
Post by joe
I am having problems checking for the value of an XMLDOM object .
Lets say my XMLDOM object was successfully created as objXMLDoc, and that
'-------------------
For x = 1 To 10
Set oItemPrice = objXMLDoc.selectSingleNode("//Item[x]/Price")
'--- conditional stuff that fails here
Next
'-------------------
some of the Items don't have a price, therefore the object oItemPrice will
fail at some point. So I want to check for this failure, but everything I do
gives me errors.
1. If not oItemPrice Then
2. If oItemPrice.lenght = 0 Then
3. If oItemPrice = empty or oItemPrice = "" or isnull(oItemPrice) Then
4. If not (oItemPrice) Then
" Object doesn't support this property or method"
Any help is appreciated.
joe
2005-05-31 20:27:52 UTC
Permalink
Mark Schupp:

Your function worked for me. Thank you!
joe
2005-06-01 15:07:41 UTC
Permalink
Lately I've been surfing the MS knowledge pages to find XML related stuff,
and I've noticed that (of the two primary scripting languages used with ASP)
Jscript has way much more prominence that VBscript in the examples given.
Acutally, most of what I found was Jscript, C++ and Visual Basic.

Is MS pushing JScript as a preferred scripting language for their present
and future technologies? Not that I care, I like JScript. Just trying to see
where things are heading...
McKirahan
2005-06-01 15:29:25 UTC
Permalink
Post by joe
Lately I've been surfing the MS knowledge pages to find XML related stuff,
and I've noticed that (of the two primary scripting languages used with ASP)
Jscript has way much more prominence that VBscript in the examples given.
Acutally, most of what I found was Jscript, C++ and Visual Basic.
Is MS pushing JScript as a preferred scripting language for their present
and future technologies? Not that I care, I like JScript. Just trying to see
where things are heading...
JScript (JavaScript, ECMAScript) are often used client-side as they are
cross-browser compatible; whereas, VBScript requires an IE browser.
Bob Barrows [MVP]
2005-06-01 15:30:28 UTC
Permalink
Post by joe
Lately I've been surfing the MS knowledge pages to find XML related
stuff, and I've noticed that (of the two primary scripting languages
used with ASP) Jscript has way much more prominence that VBscript in
the examples given. Acutally, most of what I found was Jscript, C++
and Visual Basic.
Is MS pushing JScript as a preferred scripting language for their
present and future technologies? Not that I care, I like JScript.
Just trying to see where things are heading...
IE is the only browser that will run vbscript in client-side code ... If you
want cross-browser capabilities, you need to use javascript/jscript when
writing client-side code.

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.
David Patow
2005-06-09 12:10:03 UTC
Permalink
Sorry about coming late to this party, but I think there's a much simpler
solution ...

Set oItemPrice = objXMLDoc.selectSingleNode("//Item[x]/Price")
If Not oItemPrice Is Nothing Then
' You can use oItemPrice in here.
End If

Yes, VB and VBScript are a little odd in this area, because they prefer to
use the default property of an object when assigning and comparing. This is
why there is the special "Set" statement and the above "Is" operator, which
act upon the object pointer itself, not its default property.
Marvin Smit
2005-06-09 14:33:26 UTC
Permalink
Hi David,

you could also consider using the "For Each" statement

Dim lItemWithPrice as MSXML2.IXMLDOMElement

For Each lItemWithPrice in
objXMLDoc.selectSingleNode("//Item/Price")
' l_ItemWithPrice = "Price" element of an item.

or

For Each lItemWithPrice in
objXMLDoc.selectSingleNode("//Item[Price]")
' lItemWithPrice = "Item" element that has a child element named
"Price".

Hope this helps,

Marvin Smit



On Thu, 9 Jun 2005 05:10:03 -0700, "David Patow"
Post by David Patow
Sorry about coming late to this party, but I think there's a much simpler
solution ...
Set oItemPrice = objXMLDoc.selectSingleNode("//Item[x]/Price")
If Not oItemPrice Is Nothing Then
' You can use oItemPrice in here.
End If
Yes, VB and VBScript are a little odd in this area, because they prefer to
use the default property of an object when assigning and comparing. This is
why there is the special "Set" statement and the above "Is" operator, which
act upon the object pointer itself, not its default property.
Loading...