]> err.no Git - sope/commitdiff
added more KVC support to DOM
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sat, 30 Jul 2005 18:44:32 +0000 (18:44 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sat, 30 Jul 2005 18:44:32 +0000 (18:44 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@949 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-xml/DOM/ChangeLog
sope-xml/DOM/DOMElement.m
sope-xml/DOM/README
sope-xml/DOM/Version

index d9800e7c6c2f2f50f8e361294dda7bccb4987da4..7daa4e900024505760193adbdee7b5c972465f87 100644 (file)
@@ -1,6 +1,10 @@
 2005-07-30  Helge Hess  <helge.hess@opengroupware.org>
 
-       * v.4.5.17
+       * DOMElement.m: evaluate KVC keys starting with a slash '/' as query
+         path expressions (by stripping of the slash!), return an attribute
+         node for keys starting with '@' (v4.5.18)
+
+       * v4.5.17
 
        * DOMDocument.m: evaluate KVC keys starting with a slash '/' as query
          path expressions
index 256901c01ed48b558cd040473bed4e10dd771120..d16930c59626114aed333eaae4bf1ed1bbbb474c 100644 (file)
 #include <DOM/DOMAttribute.h>
 #include <DOM/DOMDocument.h>
 #include <DOM/DOMNodeWalker.h>
+#include "DOMNode+QueryPath.h"
 #include "common.h"
 
+
 @interface _DOMElementAttrNamedNodeMap : NSObject < DOMNamedNodeMap >
 {
   NGDOMElement *element; /* non-retained */
@@ -520,8 +522,24 @@ static NSNull *null = nil;
   return [self childNodes];
 }
 
+/* key/value coding */
+
+- (id)valueForKey:(NSString *)_key {
+  if ([_key hasPrefix:@"/"])
+    return [self lookupQueryPath:[_key substringFromIndex:1]];
+  
+  if ([_key hasPrefix:@"@"]) {
+    return [[self attributes] namedItem:[_key substringFromIndex:1]
+                             namespaceURI:@"*"];
+  }
+  
+  return [super valueForKey:_key];
+}
+
 @end /* NGDOMElement */
 
+
+
 @implementation _DOMElementAttrNamedNodeMap
 
 - (id)initWithElement:(id)_element {
@@ -768,7 +786,7 @@ static NSString *_XNSLocalName(NSString *_name) {
   
   [ms appendString:@" attributes:\n"];
   e = [self objectEnumerator];
-  while ((attr = [e nextObject])) {
+  while ((attr = [e nextObject]) != nil) {
     [ms appendString:[attr description]];
     [ms appendString:@"\n"];
   }
index 449282d7cac26b1f7faa1ac5fa8a4558b1fddcce..deeaea948bc12f2d352ce05f2a3cc683dffc6c3d 100644 (file)
@@ -29,6 +29,9 @@ Samples:
   document./uid                        => DOMElement or array! matching 'uid'
   document./uid.textValue              => text-value of 'uid' element
 
+  element.@value.textValue    => text-value of 'value' attribute of element
+  element./subnode.textValue  => lookup subnode (strips of the /) using QP
+
 
 Some info on classes ...
 ========================
index 3c3eedfd9be9674738563e52ca04e222c558e0b0..c5124e5be73d79dfb4c67752a53780a8cd7f4073 100644 (file)
@@ -1,3 +1,3 @@
 # version file
 
-SUBMINOR_VERSION:=17
+SUBMINOR_VERSION:=18