|Subject: Still sometimes getting beat by my old arch-enemy the namespace |
Author: Neal Walters
Date: 04 May 2010 01:52 AM
I wrote a .NET C# routine to add a update or add an element to an existing XML structure. It seemed to work when okay when the data was in one format, and not in the other.
So in an attempt to understand the issues, I created the following somewhat crazy xml sample. I'm also trying to build unit tests to cover all my bases.
Using Stylus Studio, and removing the subscripts (such as ), I have identified the the four ways to get the "firstname" elements above:
/myroot/*[local-name()='group1' and namespace-uri()='myGroup1Different']/*[local-name()='firstname' and namespace-uri()='myGroup1Different']
/myroot/*[local-name()='group2' and namespace-uri()='myGroup2BizTalkStyle']/firstname
/myroot/*[local-name()='group3' and namespace-uri()='myGroup3SerializerStyle']/firstname
/myroot/*[local-name()='group4' and namespace-uri()='myGroup4']/firstname
Basically the first one is different, and the last three are essentially the same (just different namespaces and element names).
My question is this... In Stylus Studio, you show the #text node separate on group3 and group4, but not on group1 and group2.
Does this indicate a difference in the internal DOM structure?
Or is that just a shortcut, that you don't display the #text node when there is only one #text node under the element?
This also applies when I use the "Xpath Query Editor". The first and second queries do not show the #text node, but the third and fourth do.
What started me on this trek was the way the XmlSerializer in .NET was serializing the data (about 6 weeks ago, see here: http://stackoverflow.com/questions/2410620/net-xmlserializer-to-element-formdefaultunqualified-xml).
Then yesterday, a user put some data in our system using one of the alternate above formats, and my .NET code failed to handle it correctly. Also, when people hand edit the XML, they sometimes remove the namespaces prefixes, but then do not put the xmlns="" on the child elements. I don't blame them, it seems counter intuitive to do so, but then things start to really fail.