Avatar of monkeybiz12345
monkeybiz12345
 asked on

XML - how to check for the existence of an element and retrieve its value if found

Greetings Experts!

Working with vbscript and a very limited knowledge of XML files, I'm trying to create a function that gets several pieces of information from the MaterialPosting element of an XML file.  

As long as I stick to elements that 1) are always present in the XML and 2) have values directly under the /JobInfo/MaterialPosting element, such as StockCode, I can get what I need but I'm having trouble retrieving the values of items that are one level deeper, such as Bins and Serials.  I was able to figure out how to get the value of the Bins/Bin element (see line 21 of the code below). However, it doesn't work for serials because the Serials element does not always exist.  

After spending the better part of a day with the Microsoft docs on XML Dom, my head is spinning and I still don't get it.  The code below is my latest attempt.  It returns an error of "object doesn't support this property or method" at line 11.  

How can I check to see if the element called Serials exists in my XML and, if the Serial element exists, retrieve its value?

Many thanks, in advance, for your help!



Dim objDom, objNodeList, Counter, myXML
   Set objDom = CreateObject("MSXML2.DOMDocument")
   objDom.LoadXML(XMLOut)

   Set objNodeList = objDom.SelectNodes ("//JobInfo/MaterialPosting")
       If objNodeList.length > 0 then

  ' Loop through each of the MaterialPosting elements
      For Counter = 0 To objNodeList.length - 1
          dim aSerialNode
          aSerialNode = objNodeList(Counter).SelectSingleNode("//JobInfo/MaterialPosting/Serials")
		  If aSerialNode = nothing Then
		     msgbox "no serial node"
		  Else
		     msgbox "serial node found"
		  End If
 
         MyXML = MyXML & objNodeList(Counter).SelectSingleNode("MStockCode").Text & Chr(255) &_
                 objNodeList(Counter).SelectSingleNode("MLot").Text & Chr(255) &_
	         objNodeList(Counter).SelectSingleNode("MQtyIssued").Text & Chr(255) &_
	   	 objNodeList(Counter).SelectSingleNode("./MBins/Bin").Text & vbCrLf
		   ' objNodeList(Counter).SelectSingleNode("./MSerials/Serial").Text & vbCrLf
         
      Next
   End If 

Open in new window



My XML file looks like this:

<JobInfo>
   <JobHeader>
      <Job>00006962</Job>
      <Value>          205.88</Value>
   </JobHeader>
<MaterialPosting>
   <StockCode>COMPONENT1</StockCode>
   <QtyIssued>2</QtyIssued>
   <Bins>
      <Bin>Assembly1</Bin>
      <BinQtyIssued>2</BinQtyIssued>
   </Bins>
</MaterialPosting>
<MaterialPosting>
<StockCode>COMPONENT2</StockCode>
<QtyIssued>1</QtyIssued>
<Lot>LOT6000</Lot>
<Bins>
   <Bin>Assembly1</Bin>
   <BinQtyIssued>1</BinQtyIssued>
</Bins>
<Serials>
   <Serial>1962919011</Serial>
   <SerialQtyIssued>1</SerialQtyIssued>
   <ExpirationDate/>
</Serials>
</MaterialPosting>
</JobInfo>
VB ScriptXML

Avatar of undefined
Last Comment
zc2

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
zc2

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
monkeybiz12345

ASKER
This gets me going again.  Thank you zc2!
zc2

You are welcome!
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes