[R] XML and str
Duncan Temple Lang
duncan at wald.ucdavis.edu
Sat Feb 10 16:18:30 CET 2007
Martin Maechler wrote:
>>>>>> "Ashley" == Ashley Ford <ford at signal.QinetiQ.com>
>>>>>> on Wed, 07 Feb 2007 17:18:56 +0000 writes:
>
> Ashley> If I read in an .xml file eg with
>
> >> xeg <- xmlTreeParse(system.file("exampleData", "test.xml",
> package="XML"))
>
> Ashley> It appears to be OK however examining it with str() gives an apparent
> Ashley> error
>
> >> str(xeg, 2)
> Ashley> List of 2
> Ashley> $ doc:List of 3
> Ashley> ..$ file : list()
> Ashley> .. ..- attr(*, "class")= chr [1:2] "XMLComment" "XMLNode"
> Ashley> ..$ version :List of 4
> Ashley> .. ..- attr(*, "class")= chr "XMLNode"
> Ashley> ..$ children:Error in obj$children[[...]] : subscript out of bounds
>
> Ashley> I am unsure if this is a feature or a bug and if the latter whether it
> Ashley> is in XML or str, it is not causing a problem but I would like to
> Ashley> understand what is happening, any ideas ?
>
> Yes - thank you for providing a well-reproducible example.
> After setting
> options(error = recover)
>
> I do
>
> > obj <- xeg$doc
> > mode(obj) # "list"
> [1] "list"
> > is.list(obj) # TRUE
> [1] TRUE
> > length(obj) # 3
> [1] 3
> > obj[[3]] # ---> the error you see above.
> Error in obj$children[[...]] : subscript out of bounds
>
> Enter a frame number, or 0 to exit
>
> 1: obj[[3]]
> 2: `[[.XMLDocumentContent`(obj, 3)
>
> Selection: 0
>
> > obj$children # works, should be identical to obj[[3]]
> $comment
> <!--A comment-->
>
> $foo
> <foo x="1">
> <element attrib1="my value"/>
> ......
>
> This shows that the XML package implements the "[[" method
> wrongly IMHO and also inconsistently with the "$" method.
>
>>From a strict OOP view, the XML author could argue that
> this is not a bug in XML but rather str() which assumes that
> x[[length(x)]] works for objects of mode "list" even when they
> are not of *class* "list", but I hope he would still rather
> consider changing [[.XMLDocumentContent ...
>
More likely, the appropriate fix is to have
length() return the relevant value.
I even recall considering this at the time of writing
the package initially. But that was back in 1999/2000
and S4 and R/S-Plus compatibility were not what they
are now. It could be changed. Not certain when I will
get a chance.
D.
> Martin
>
> Ashley> examining components eg
> >> str(xeg$doc$children,2)
>
> Ashley> List of 2
> Ashley> $ comment: list()
> Ashley> ..- attr(*, "class")= chr [1:2] "XMLComment" "XMLNode"
> Ashley> etc
>
> Ashley> is OK.
>
> Ashley> XML Version 1.4-1,
> Ashley> same behaviour on Windows and Linux, R version 2.4.1 (2006-12-18)
>
>
>
>
> Ashley> The information contained in this E-Mail and any subsequent
> Ashley> correspondence is private and is intended solely for the intended
> Ashley> recipient(s). The information in this communication may be confidential
> Ashley> and/or legally privileged. Nothing in this e-mail is intended to
> Ashley> conclude a contract on behalf of QinetiQ or make QinetiQ subject to any
> Ashley> other legally binding commitments, unless the e-mail contains an express
> Ashley> statement to the contrary or incorporates a formal Purchase Order.
>
> Ashley> For those other than the recipient any disclosure, copying,
> Ashley> distribution, or any action taken or omitted to be taken in reliance on
> Ashley> such information is prohibited and may be unlawful.
>
> Ashley> Emails and other electronic communication with QinetiQ may be monitored
> Ashley> and recorded for business purposes including security, audit and
> Ashley> archival purposes. Any response to this email indicates consent to
> Ashley> this.
>
> Ashley> Telephone calls to QinetiQ may be monitored or recorded for quality
> Ashley> control, security and other business purposes.
>
> Ashley> QinetiQ Group plc,
>
> Ashley> Company Registration No: 4586941,
>
> Ashley> Registered office: 85 Buckingham Gate, London SW1E 6PD
>
> Ashley> ______________________________________________
> Ashley> R-help at stat.math.ethz.ch mailing list
> Ashley> https://stat.ethz.ch/mailman/listinfo/r-help
> Ashley> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> Ashley> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list