File: solrDocs.R

package info (click to toggle)
r-cran-xml 3.99-0.19-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,688 kB
  • sloc: ansic: 6,659; xml: 2,890; asm: 486; sh: 12; makefile: 2
file content (47 lines) | stat: -rw-r--r-- 1,338 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
setGeneric("readSolrDoc", 
           function(doc, ...)
             standardGeneric("readSolrDoc"))

setMethod("readSolrDoc", "character",
           function(doc, ...)
              readSolrDoc(xmlParse(doc), ...))

setMethod("readSolrDoc", "AsIs",
           function(doc, ...)
              readSolrDoc(xmlParse(doc), ...))

setMethod("readSolrDoc", "XMLInternalDocument",
           function(doc, ...)
              readSolrDoc(xmlRoot(doc), ...))


setMethod("readSolrDoc", "XMLInternalNode",
           function(doc, ...) {
             kids = xmlChildren(doc)
             kids = kids[!sapply(kids, inherits, "XMLInternalCommentNode")]
             if(length(kids) == 0)
                return(list())
             
             keys = sapply(kids, xmlGetAttr, "name")
             structure(lapply(kids, readSolrNodeValue),
                       names = keys)
           })


readSolrNodeValue =
function(node)
{
  id = xmlName(node)
  switch(id, int = if(abs(tmp <- as.numeric(xmlValue(node))) > .Machine$integer.max) tmp else as.integer(xmlValue(node)),
             long = as.numeric(xmlValue(node)),
             str = xmlValue(node),
             lst = readSolrDoc(node),
             bool = as.logical(xmlValue(node)),
             date = as.POSIXct(strptime(xmlValue(node), "%Y-%m-%dT%H:%M:%SZ")),
           )
}