On Fri, 04 Mar 2011 14:25:06 -0600, Heath Borders <[email protected]> said: >I'm trying to parse a document with a namespace declared on a non-root element: > ><root><example:foo xmlns:example="http://example.com/foo">This is an >exemplary foo!</example:foo></root> > >I can read this xml into an NSXMLDocument just fine, but the following >XPath query on root returns a non-nil, but empty NSArray: > >NSXMLNode *rootNode = ...// create my root node somehow >NSArray *exampleFooElements = [rootNode >nodesForXPath:@"/root/example:foo" error:nil]; >// exampleFooElements != nil && [exampleFooElements count] == 0 > >However, if I add the namespace declaration to the root element, >everything is fine: > ><root xmlns:example="http://example.com/foo"><example:foo>This is an >exemplary foo!</example:foo></root> > >NSXMLNode *rootNode = ...// create my root node somehow >NSArray *exampleFooElements = [rootNode >nodesForXPath:@"/root/example:foo" error:nil]; >// exampleFooElements != nil && [exampleFooElements count] == 1 > >I can do this change programmatically, but I'd rather not have to >modify the document. This namespace usage should be legal. Am I >doing something wrong?
It's no use just saying "example:"; you have to have a way to tell it what "example:" *is* - i.e. you have to bind the namespace - and you don't have a way to do that from here. One option is to bypass the namespace altogether: nodesForXPath:@"//*[local-name()='foo']" m. -- matt neuburg, phd = [email protected], <http://www.apeth.net/matt/> A fool + a tool + an autorelease pool = cool! Programming iOS 4! http://www.apeth.net/matt/default.html#iosbook_______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
