Dare Obasanjo's weblog
"You can buy cars but you can't buy respect in the hood" - Curtis Jackson
Navigation for Your Own Personal Freaknik and XML Geekery - Dare Obasanjo's weblog
Content
Sidebar
Footer
March 15, 2003
@ 11:58 PM
Comments [0]
Your Own Personal Freaknik and XML Geekery
There are several different data models for XML even within the W3C. Each of these data models for XML have different ideas has different ideas of what constitutes a node or more generally a significant item in an XML document. The
XPath 1.0 data model
has 7 nodes (root, element, attribute, namespace, text, comment and processing instruction) which is similar to the type and number of nodes in the
XQuery data model
except that the root node is renamed to the document node to more accurately reflect the fact that it represents the entire XML document.
On the other hand the W3C Document Object Model has
12 node types
(document, element, attribute, text, comment, processing instruction, CDATA section, entity, entity reference, doctype, notation, and document fragment)
What tends to cause confusion is when one mixes data models as is the case of performing XPath over the DOM. In such cases discrepencies in the data models may cause problems or lead to some confusion. The following example illustrates such a point of confusion
using System;
using System.Xml;
class Test{
public static void Main(string[] args){
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root>Sam <![CDATA[ I ]]> Am</root>");
Console.WriteLine(doc.SelectNodes("/root/child::node()").Count);
foreach(XmlNode xn in doc.SelectNodes("/root/child::node()")){
Console.WriteLine(xn.OuterXml);
}
}
}
Now the question is what should the output of the program be?
3
Sam <![CDATA[ I ]]> Am
1
Sam I Am
1
Sam
Contrary to most expectations the answer is C.
From a DOM perspective the answer A seems obvious because the
root
element does have three DOM nodes as children; a text node containing the string "Sam", the CDATA section and another text node containing the string "Am". The problem with A is that the XPath data model does not have CDATA sections so a XmlCDataSection instance cannot be returned by an XPath query.
B seems like the logical answer because the XPath data model explicitly states that CDATA sections are removed and adjacent text nodes are merged. The problem with B is that the original document did not contain a text node containing the string "Sam I Am" so this means the XPath query would have to create a new node. Even worse one wonders what happens when an attempt is made to access the ParentNode property of the returned Xmlnode object. Should it point at the original
root
element in the DOM even though the newly created node is technically not one of its child nodes.
C is the compromise answer. It returns something that makes sense to the XPath data model (a text node) but acts only as selection of a child node of the
root
element without creating a brand new DOM node whose parentage is questionable.
I love my job. :)
Tweet
Categories:
« Toot Toot Beep Beep
|
Home
|
Y'all Done Up And Done It »
Comments are closed.
RSS/Subscribe
Archives
All dates
All Posts
Search
Latest Posts
Culture Eats Strategy for Breakfast
Some Thoughts on Paul Graham’s Essay on Income Inequality
How Facebook Knows Who You’re Talking to on Tinder and OKCupid
Fabric: Why Developers Can Trust Twitter Won’t Screw Them This Time
5 Account Security Features Every Online Service Should Implement But Doesn't
Facebook’s Newsfeed Experiment: Most people have grabbed the wrong end of the stick
Change is bad unless it’s great: Lessons from user revolts against Foursquare’s Swarm and the new Skype for iPhone
Facebook’s App Links: The Good, the Bad and the Ugly
The mobile web vs apps is another front on the battle between open and closed systems
How Facebook Knows What You Looked at on Amazon
Categories
Cloud Computing (5)
Comics (1)
Competitors/Web Companies (161)
Current Affairs (31)
Das Blog (3)
dasBlog (1)
Life in the B0rg Cube (197)
Mindless Link Propagation (185)
Movie Review (13)
MSN (127)
Music (20)
Office Live (8)
Personal (54)
Platforms (59)
Programming (58)
Ramblings (145)
Rants (7)
RSS Bandit (215)
Seattle Startup Shoutout (4)
Social Software (185)
Startup Shoutout (4)
Syndication Technology (108)
Technology (169)
Trip Report (63)
Video Games (6)
Web Development (198)
Windows Live (227)
XML (203)
XML Web Services (114)
Archives
January, 2016 (2)
October, 2015 (1)
October, 2014 (1)
September, 2014 (1)
July, 2014 (1)
June, 2014 (1)
May, 2014 (1)
April, 2014 (1)
February, 2014 (1)
January, 2014 (1)
December, 2013 (1)
November, 2013 (2)
July, 2013 (1)
March, 2013 (1)
November, 2012 (2)
September, 2012 (2)
July, 2012 (3)
June, 2012 (1)
April, 2012 (1)
February, 2012 (1)
January, 2012 (1)
November, 2011 (1)
September, 2011 (3)
July, 2011 (2)
June, 2011 (1)
April, 2011 (1)
March, 2011 (1)
January, 2011 (2)
November, 2010 (2)
October, 2010 (2)
August, 2010 (3)
July, 2010 (3)
June, 2010 (3)
April, 2010 (6)
March, 2010 (3)
February, 2010 (5)
January, 2010 (4)
December, 2009 (2)
November, 2009 (8)
October, 2009 (1)
September, 2009 (3)
August, 2009 (4)
June, 2009 (1)
May, 2009 (12)
April, 2009 (5)
March, 2009 (17)
February, 2009 (11)
January, 2009 (20)
December, 2008 (12)
November, 2008 (12)
October, 2008 (22)
September, 2008 (12)
August, 2008 (15)
July, 2008 (18)
June, 2008 (19)
May, 2008 (12)
March, 2008 (2)
February, 2008 (27)
January, 2008 (20)
December, 2007 (26)
November, 2007 (26)
October, 2007 (29)
September, 2007 (16)
August, 2007 (34)
July, 2007 (26)
June, 2007 (33)
May, 2007 (37)
April, 2007 (14)
March, 2007 (32)
February, 2007 (35)
January, 2007 (29)
December, 2006 (29)
November, 2006 (47)
October, 2006 (26)
September, 2006 (46)
August, 2006 (40)
July, 2006 (38)
June, 2006 (48)
May, 2006 (33)
April, 2006 (39)
March, 2006 (38)
February, 2006 (42)
January, 2006 (42)
December, 2005 (43)
November, 2005 (40)
October, 2005 (48)
September, 2005 (45)
August, 2005 (40)
July, 2005 (31)
June, 2005 (36)
May, 2005 (38)
April, 2005 (31)
March, 2005 (39)
February, 2005 (22)
January, 2005 (25)
December, 2004 (32)
November, 2004 (27)
October, 2004 (24)
September, 2004 (26)
August, 2004 (23)
July, 2004 (25)
June, 2004 (29)
May, 2004 (39)
April, 2004 (37)
March, 2004 (41)
February, 2004 (51)
January, 2004 (54)
December, 2003 (42)
November, 2003 (40)
October, 2003 (41)
September, 2003 (8)
August, 2003 (11)
July, 2003 (9)
June, 2003 (14)
May, 2003 (12)
April, 2003 (12)
March, 2003 (13)
February, 2003 (13)
January, 2003 (13)
December, 2002 (12)
November, 2002 (8)
October, 2002 (6)
September, 2002 (5)
August, 2002 (6)
July, 2002 (6)
June, 2002 (4)
May, 2002 (8)
April, 2002 (3)
March, 2002 (1)
February, 2002 (1)
January, 2002 (4)
November, 2001 (4)
October, 2001 (3)
September, 2001 (3)
August, 2001 (1)
July, 2001 (1)
May, 2001 (0)
April, 2001 (2)
March, 2001 (2)
BlogRoll
Alexander Groß
Anthony Bouch
Ben Scheirman
Clemens Vasters
Erv Walter
Gray's Matter
Harry Pierson
James Snape
John Forsythe
Joshua Flanagan
Kris van der Mast
Mark Michaelis
Michael Earls
Omar Shahine
Paulb Vanbrenk
Scott Hanselman
Stephen Forte
Steven Rockarts
Tom Mertens
Tom Watts
Tony Bunce
Vasanth Dharmaraj
Categories
Cloud Computing
Comics
Competitors/Web Companies
Current Affairs
Das Blog
dasBlog
Life in the B0rg Cube
Mindless Link Propagation
Movie Review
MSN
Music
Office Live
Personal
Platforms
Programming
Ramblings
Rants
RSS Bandit
Seattle Startup Shoutout
Social Software
Startup Shoutout
Syndication Technology
Technology
Trip Report
Video Games
Web Development
Windows Live
XML
XML Web Services
Contact the Author
Themes
Pick a theme:
BlogXP
business
calmBlue
Candid Blue
dasBlog
dasblogger
dasblueblog
dasEmerald
DirectionalRedux
Discreet Blog Blue
Elegante
essence
Just Html
MadsSimple
Mobile
Mono
Movable Radio Blue
Movable Radio Heat
nautica022
orangeCream
Portal
Project84
Project84Grass
Slate
Sound Waves
Tricoleur
useit.com
Voidclass2
Admin
Sign In