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.
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.
Subject:Still sometimes getting beat by my old arch-enemy the namespace Author:(Deleted User) Date:11 May 2010 10:18 AM
Stylus Studio displays the text node in the right column of an element node as a shortcut, when the element node has no attributes and no other child nodes. Placing it on the right when there is a subnode holding the attribute (in this case, xmlns="") would be assuming that the text comes before of the attribute in the original XML text stream.