troubleshooting Question

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

Avatar of monkeybiz12345
monkeybiz12345 asked on
XMLVB Script
3 Comments1 Solution134 ViewsLast Modified:
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 


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>
ASKER CERTIFIED SOLUTION
zc2

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 3 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 3 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros