Re: NSXMLElement children doesn't return whitespace text nodes
Re: NSXMLElement children doesn't return whitespace text nodes
- Subject: Re: NSXMLElement children doesn't return whitespace text nodes
- From: Heath Borders <email@hidden>
- Date: Fri, 04 Mar 2011 15:12:13 -0600
>From the Tree-Based XML Programming Guide:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NSXML_Concepts/Articles/CreatingXMLDoc.html#//apple_ref/doc/uid/TP40001255-BCIGHBDI
Preservation. The enum constants beginning with NSXMLNodePreserve
support document fidelity. They allow you to ensure that aspects of
the string XML input—for instance, quoting style of attribute values,
CDATA sections, attribute and namespace order—remain the same when XML
text is written out from the NSXMLDocument object. If you do not
specify a preservation option for an aspect, NSXMLDocument handles it
in a predetermined manner. For example, when NSXMLDocument reads in
and parses an XML document, it normally strips white-space characters
used in formatting (including tabs and carriage returns); however, if
you specify NSXMLNodePreserveWhitespace these characters are kept
hidden in the internal representation of the XML document. (“Hidden”
means the white-space characters are retained for the output of the
document, but are not visible within the tree representation.) Note
that white space in text nodes is always preserved, and is not
affected by the NSXMLNodePreserveWhitespace option.
Notice the last sentence:
Note that white space in text nodes is always preserved, and is not
affected by the NSXMLNodePreserveWhitespace option.
If my text node has non-whitespace in it, it gets recognized as a text
node, and whitespace is preserved in the stringValue:
<root><foo>A foo.</foo><myText> a space on either side </myText><bar>A
bar.</bar></root>
NSXMLElement *myTextElement = ... // get myText element somehow
[myTextElement stringValue]; // returns " a space on either side "
However:
<root><foo>A foo.</foo><myText> </myText><bar>A bar.</bar></root>
NSXMLElement *myTextElement = ... // get myText element somehow
[myTextElement stringValue]; // returns "" (empty)
This seems inconsistent with
"Note that white space in text nodes is always preserved, and is not
affected by the NSXMLNodePreserveWhitespace option."
-Heath Borders
email@hidden
Twitter: heathborders
http://heath-tech.blogspot.com
On Fri, Mar 4, 2011 at 9:40 AM, Heath Borders <email@hidden> wrote:
> That worked!
>
> Embarrassingly, I looked at the documentation for NSXMLDocumentTidyXML
> and found my answer, as well:
>
> Changes malformed XML into valid XML during processing of the document.
> It also eliminates “pretty-printing” formatting, such as leading tab
> characters. However, it respects the xmlns:space="preserve" attribute.
> (Input)
> Available in Mac OS X v10.4 and later.
> Declared in NSXMLNodeOptions.h.
>
> -Heath Borders
> email@hidden
> Twitter: heathborders
> http://heath-tech.blogspot.com
>
>
>
> On Thu, Mar 3, 2011 at 10:33 PM, Gideon King <email@hidden> wrote:
>> I recall that I had problems with that too, and IIRC, the NSXMLNodePreserveWhitespace didn't seem to work, but right now I have xml:space="preserve" in the XML and parse it with just the NSXMLDocumentTidyXML option, and that works. I believe I just went through all the combinations and permutations until I found that magic combination, and have just stuck with it.
>>
>> HTH
>>
>> Regards
>>
>> Gideon
>> On 04/03/2011, at 3:02 AM, Heath Borders wrote:
>>
>>> I have the following xml:
>>>
>>> <root><foo>A foo.</foo> <bar>A bar.</bar></root>
>>>
>>> Is there a way to access the whitespace-only NSXMLTextKind NSXMLNode?
>>>
>>> I've also tried changing my document thusly:
>>>
>>> <root xml:space="preserve"><foo>A foo.</foo> <bar>A bar.</bar></root>
>>>
>>> I specify
>>>
>>> NSXMLNodePreserveWhitespace
>>>
>>> as my option to NSXMLDocument's
>>>
>>> initWithXMLString:options:error:
>>>
>>> selector.
>>>
>>> Thanks!
>>>
>>
>>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden