ObjFW  Check-in [0a083111c7]

Overview
Comment:Improve serialization of OFXMLElement.

It does not store the namespaces for the prefixes "xml" and "xmlns"
anymore.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 0a083111c79b504793703d06d991d3c920bd91258a9dfed97a3f497c680efef0
User & Date: js on 2011-12-12 13:32:50
Other Links: manifest | tags
Context
2011-12-12
20:17
Remove imports from ObjFW.h that don't exist anymore. check-in: 3df0629692 user: js tags: trunk
13:32
Improve serialization of OFXMLElement. check-in: 0a083111c7 user: js tags: trunk
2011-12-11
01:59
Allow comments in JSON. check-in: 6203c9e8f2 user: js tags: trunk
Changes

Modified src/OFXMLElement.m from [d295443a31] to [7304a0b96d].

314
315
316
317
318
319
320








321
322
323
324
325
326
327
			 namespace: OF_SERIALIZATION_NS] elementsForNamespace:
		    OF_SERIALIZATION_NS] firstObject];

		attributes = [[attributesElement objectByDeserializing] copy];
		namespaces = [[namespacesElement objectByDeserializing] copy];
		children = [[childrenElement objectByDeserializing] copy];









		if (name == nil)
			@throw [OFInvalidArgumentException
			    exceptionWithClass: isa
				      selector: _cmd];

		[pool release];
	} @catch (id e) {







>
>
>
>
>
>
>
>







314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
			 namespace: OF_SERIALIZATION_NS] elementsForNamespace:
		    OF_SERIALIZATION_NS] firstObject];

		attributes = [[attributesElement objectByDeserializing] copy];
		namespaces = [[namespacesElement objectByDeserializing] copy];
		children = [[childrenElement objectByDeserializing] copy];

		if (namespaces == nil)
			namespaces = [[OFMutableDictionary alloc] init];

		[namespaces setObject: @"xml"
			       forKey: @"http://www.w3.org/XML/1998/namespace"];
		[namespaces setObject: @"xmlns"
			       forKey: @"http://www.w3.org/2000/xmlns/"];

		if (name == nil)
			@throw [OFInvalidArgumentException
			    exceptionWithClass: isa
				      selector: _cmd];

		[pool release];
	} @catch (id e) {
710
711
712
713
714
715
716


717






718
719
720
721
722
723

724
725
726
727
728
729
730
		[attributesElement addChild:
		    [attributes XMLElementBySerializing]];
		[element addChild: attributesElement];
	}

	if (namespaces != nil) {
		OFXMLElement *namespacesElement;









		namespacesElement =
		    [OFXMLElement elementWithName: @"namespaces"
					namespace: OF_SERIALIZATION_NS];
		[namespacesElement addChild:
		    [namespaces XMLElementBySerializing]];
		[element addChild: namespacesElement];

	}

	if (children != nil) {
		OFXMLElement *childrenElement;

		childrenElement =
		    [OFXMLElement elementWithName: @"children"







>
>

>
>
>
>
>
>
|
|
|
|
|
|
>







718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
		[attributesElement addChild:
		    [attributes XMLElementBySerializing]];
		[element addChild: attributesElement];
	}

	if (namespaces != nil) {
		OFXMLElement *namespacesElement;
		OFMutableDictionary *namespacesCopy =
		    [[namespaces mutableCopy] autorelease];

		[namespacesCopy removeObjectForKey:
		    @"http://www.w3.org/XML/1998/namespace"];
		[namespacesCopy removeObjectForKey:
		    @"http://www.w3.org/2000/xmlns/"];

		if ([namespacesCopy count] > 0) {
			namespacesElement =
			    [OFXMLElement elementWithName: @"namespaces"
						namespace: OF_SERIALIZATION_NS];
			[namespacesElement addChild:
			    [namespacesCopy XMLElementBySerializing]];
			[element addChild: namespacesElement];
		}
	}

	if (children != nil) {
		OFXMLElement *childrenElement;

		childrenElement =
		    [OFXMLElement elementWithName: @"children"

Modified tests/serialization.xml from [12b8649327] to [56f53a7b7a].

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
    <key>
      <OFList>
        <OFString>Hello</OFString>
        <OFString>Wo&#xD;ld!
How are you?</OFString>
        <OFURL>https://webkeks.org/</OFURL>
        <OFXMLElement name='x'>
          <namespaces>
            <OFMutableDictionary>
              <key>
                <OFString>http://www.w3.org/2000/xmlns/</OFString>
              </key>
              <object>
                <OFString>xmlns</OFString>
              </object>
              <key>
                <OFString>http://www.w3.org/XML/1998/namespace</OFString>
              </key>
              <object>
                <OFString>xml</OFString>
              </object>
            </OFMutableDictionary>
          </namespaces>
          <children>
            <OFMutableArray>
              <OFXMLElement name='y'>
                <namespaces>
                  <OFMutableDictionary>
                    <key>
                      <OFString>http://www.w3.org/2000/xmlns/</OFString>
                    </key>
                    <object>
                      <OFString>xmlns</OFString>
                    </object>
                    <key>
                      <OFString>http://www.w3.org/XML/1998/namespace</OFString>
                    </key>
                    <object>
                      <OFString>xml</OFString>
                    </object>
                  </OFMutableDictionary>
                </namespaces>
              </OFXMLElement>
              <OFXMLCDATA><![CDATA[<]]></OFXMLCDATA>
            </OFMutableArray>
          </children>
        </OFXMLElement>
        <OFSet>
          <OFString>foo</OFString>
          <OFString>bar</OFString>







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<


|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







29
30
31
32
33
34
35
















36
37
38

















39
40
41
42
43
44
45
    <key>
      <OFList>
        <OFString>Hello</OFString>
        <OFString>Wo&#xD;ld!
How are you?</OFString>
        <OFURL>https://webkeks.org/</OFURL>
        <OFXMLElement name='x'>
















          <children>
            <OFMutableArray>
              <OFXMLElement name='y'/>

















              <OFXMLCDATA><![CDATA[<]]></OFXMLCDATA>
            </OFMutableArray>
          </children>
        </OFXMLElement>
        <OFSet>
          <OFString>foo</OFString>
          <OFString>bar</OFString>