Dare Obasanjo aka Carnage4Life
You can buy cars but you can't buy respect in the 'hood - Curtis Jackson
Navigation for Dare Obasanjo aka Carnage4Life - Your Own Personal Freaknik and XML Geekery
Content
Sidebar
Footer
March 15, 2003
@ 03: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
Girls Around Me app FREAK OUT is really a FourSquare freak out in Disguise
Some Thoughts on Address Book Privacy and Hashing as an Alternative to Gathering Raw Email Addresses
What I Learned After 3 Weeks of Writing Mobile Apps
The Social Graph: An Imperfect Abstraction or an Evolutionary Dead End?
The Real Problem with Facebook
Categories
Cloud Computing (3)
Comics (1)
Competitors/Web Companies (157)
Current Affairs (31)
Das Blog (3)
Life in the B0rg Cube (194)
Mindless Link Propagation (185)
Movie Review (13)
MSN (127)
Music (20)
Office Live (8)
Personal (53)
Platforms (57)
Programming (56)
Ramblings (144)
Rants (7)
RSS Bandit (215)
Seattle Startup Shoutout (4)
Social Software (182)
Startup Shoutout (4)
Syndication Technology (107)
Technology (162)
Trip Report (64)
Video Games (6)
Web Development (196)
Windows Live (228)
XML (203)
XML Web Services (114)
Archives
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 (2)
September, 2009 (3)
August, 2009 (4)
June, 2009 (1)
May, 2009 (12)
April, 2009 (5)
March, 2009 (16)
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 (25)
October, 2007 (30)
September, 2007 (16)
August, 2007 (34)
July, 2007 (26)
June, 2007 (32)
May, 2007 (38)
April, 2007 (15)
March, 2007 (32)
February, 2007 (33)
January, 2007 (31)
December, 2006 (29)
November, 2006 (47)
October, 2006 (26)
September, 2006 (45)
August, 2006 (41)
July, 2006 (38)
June, 2006 (47)
May, 2006 (34)
April, 2006 (39)
March, 2006 (35)
February, 2006 (45)
January, 2006 (42)
December, 2005 (43)
November, 2005 (40)
October, 2005 (48)
September, 2005 (45)
August, 2005 (40)
July, 2005 (31)
June, 2005 (35)
May, 2005 (39)
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 (21)
July, 2004 (27)
June, 2004 (28)
May, 2004 (40)
April, 2004 (37)
March, 2004 (41)
February, 2004 (51)
January, 2004 (54)
December, 2003 (42)
November, 2003 (40)
October, 2003 (41)
September, 2003 (9)
August, 2003 (11)
July, 2003 (10)
June, 2003 (15)
May, 2003 (12)
April, 2003 (13)
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 (7)
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)
April, 2001 (3)
March, 2001 (2)
Admin
Sign In