Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How can I fill in missing XML elements with default values?

Posted on 2004-08-17
3
Medium Priority
?
260 Views
Last Modified: 2012-05-05
I'm developing web applications for in-house use and designed to interact with Microsoft's Customer Relationship Management system. The way the CRM API works with respect to retrieving data is that you call the Retrieve method on a proxy object for the type of object you are trying to retrieve, and specify the guid of the actual instance of that object you are interested in.

For example (pseudocode) :

strOutput = oInvoice.Retrieve( user_authorization, invoiceGuid, elements_you_would_like_returned)

would return an XML string describing the specific invoice who's guid is 'invoiceGuid'. If you leave 'elements_you_would_like_returned', it returns the entire invoice.

HOWEVER (this is the root of my problem), if fields in the invoice object are blank (quite a common occurance), the XML element containing that column's information is missing.

An example:
Typically once the XML string is returned, it is loaded into an XmlDocument. If I wish to display the 'Bill To' address, for instance--

xmlDoc.LoadXML(strOutput) 'output from above
textbox1.Text = xmlDoc("invoice").Item("billto_city").InnerText

-- but if the billto_city field was left blank, this throws an 'Object reference not set to an instance of object' exception.

It is not really feasable to put this inside a Try-Catch block, as I would need to do this for every column in the Invoice object.

I DO have an xsd which describes the CRM Invoice, however, having done some research, I found at http://www.w3.org/TR/xmlschema-0/ that:
 "Default attribute values apply when attributes are missing, and default element values apply when elements are empty." That seems disheartening.

So my question is this: Is there any way to put missing XML elements into the returned string so the application wouldn't throw that exception when I try and print out all the values?

Thanks in advance for any help, and for reading that long and convoluted post.
-adlibdev
0
Comment
Question by:adlibdev
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 26

Accepted Solution

by:
rdcpro earned 375 total points
ID: 11823282
One should *always* test for the presence of a node before attempting to access it.  For example, any method that returns a node should be tested to see if it returned null, before trying to look at the InnerText property.  Here's a javascript example (.NET isn't much different, though):

var oNode = xmlDoc.selectSingleNode("foo/bar/snafu");
sMyText = (oNode != null) ? oNode.text : "";

In this case, sMyText equals the value of the snafu element, if snafu exists, and is an empty string if it doesn't.

If you try to combine the two together, like:

sMyText = xmlDoc.selectSingleNode("foo/bar/snafu").text;

you're asking for trouble!  ;^)

But don't try to use try-catch blocks for this, because the overhead is high.

Regards,
Mike Sharp
0
 

Author Comment

by:adlibdev
ID: 11824551
That's not a bad way of doing it. Still a bit tedious, but I guess you can't have everything. Thanks for your help.
0
 
LVL 26

Expert Comment

by:rdcpro
ID: 11827032
Well, that's one of the reasons I like XSLT...

Regards,
Mike Sharp
0

Featured Post

Basic Security of Your VPC

So, you’ve got this shiny new VPC and a fancy new application configured on your EC2 servers ready to go. This application is only accessible from your computer, which is great for security, but you need your users to be able to access it! So, what’s the easiest way to do this?

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Client Need Led Us to RSS I recently had an investment company ask me how they might notify their constituents about their newsworthy publications.  Probably you would think "Facebook" or "Twitter" but this is an interesting client.  Their cons…
The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API (http://dictionary.reference.com/browse/API?s=t) has made its way into the popular lexicon of the English language.  A few years ago, …
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question