Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析xmlToList中的CDATA字段_Xml_R_Cdata - Fatal编程技术网

解析xmlToList中的CDATA字段

解析xmlToList中的CDATA字段,xml,r,cdata,Xml,R,Cdata,我在使用xmlToList时遇到了问题,特别是API响应中的几个CDATA字段 我正在使用一个返回XML或JSON的API。我使用XML::xmlToList将XML格式的API响应转换为列表结构,使用RJSONIO的fromJSON对JSON格式进行同样的转换 fromJSON输出正是我想要的,但我希望能够从XML响应中获得相同的结构 主要问题是,如果字段位于CDATA包装器中,xmlToList似乎会丢弃字段的内容 以下是XML中API的URL示例: 这里有一个JSON格式: 正如您在第一

我在使用xmlToList时遇到了问题,特别是API响应中的几个CDATA字段

我正在使用一个返回XML或JSON的API。我使用XML::xmlToList将XML格式的API响应转换为列表结构,使用RJSONIO的fromJSON对JSON格式进行同样的转换

fromJSON输出正是我想要的,但我希望能够从XML响应中获得相同的结构

主要问题是,如果字段位于CDATA包装器中,xmlToList似乎会丢弃字段的内容

以下是XML中API的URL示例:

这里有一个JSON格式:

正如您在第一个链接中看到的,有几个字段的值存储在CDATA中,如title

根据需要,标题字段只是一个字符串。但使用xmlToList,我得到:

正如我所期望的那样,我没有返回任何一个元素或湿土,而是得到一个包含空内容的单个元素列表。如何让xmlToList处理CDATA元素

代码如下:

xmlurl <- url('http://www.colourlovers.com/api/color/6B4106')
response1 <- paste(readLines(xmlurl, warn=FALSE), collapse='')
close(xmlurl)

jsonurl <- url('http://www.colourlovers.com/api/color/6B4106?format=json')
response2 <- paste(readLines(jsonurl, warn=FALSE), collapse='')
close(jsonurl)

str(XML::xmlToList(response1))
str(RJSONIO::fromJSON(response2))
看一看XML:::parserOptions

使用

看一看XML:::parserOptions

使用

List of 17
 $ id         : num 903893
 $ title      : chr "wet dirt"
 $ userName   : chr "jessicabrown"
 $ numViews   : num 323
 $ numVotes   : num 1
 $ numComments: num 0
 $ numHearts  : num 0
 $ rank       : num 0
 $ dateCreated: chr "2008-03-17 11:22:21"
 $ hex        : chr "6B4106"
 $ rgb        :List of 3
  ..$ red  : num 107
  ..$ green: num 65
  ..$ blue : num 6
 $ hsv        :List of 3
  ..$ hue       : num 35
  ..$ saturation: num 94
  ..$ value     : num 42
 $ description: chr ""
 $ url        : chr "http://www.colourlovers.com/color/6B4106/wet_dirt"
 $ imageUrl   : chr "http://www.colourlovers.com/img/6B4106/100/100/wet_dirt.png"
 $ badgeUrl   : chr "http://www.colourlovers.com/images/badges/c/903/903893_wet_dirt.png"
 $ apiUrl     : chr "http://www.colourlovers.com/api/color/6B4106"
List of 17
 $ id         : chr "903893"
 $ title      :List of 1
  ..$ : NULL
 $ userName   :List of 1
  ..$ : NULL
 $ numViews   : chr "323"
 $ numVotes   : chr "1"
 $ numComments: chr "0"
 $ numHearts  : chr "0"
 $ rank       : chr "0"
 $ dateCreated: chr "2008-03-17 11:22:21"
 $ hex        : chr "6B4106"
 $ rgb        :List of 3
  ..$ red  : chr "107"
  ..$ green: chr "65"
  ..$ blue : chr "6"
 $ hsv        :List of 3
  ..$ hue       : chr "35"
  ..$ saturation: chr "94"
  ..$ value     : chr "42"
 $ description:List of 1
  ..$ : NULL
 $ url        :List of 1
  ..$ : NULL
 $ imageUrl   :List of 1
  ..$ : NULL
 $ badgeUrl   :List of 1
  ..$ : NULL
 $ apiUrl     : chr "http://www.colourlovers.com/api/color/6B4106"
xmlurl <- url('http://www.colourlovers.com/api/color/6B4106')
response1 <- paste(readLines(xmlurl, warn=FALSE), collapse='')
close(xmlurl)

jsonurl <- url('http://www.colourlovers.com/api/color/6B4106?format=json')
response2 <- paste(readLines(jsonurl, warn=FALSE), collapse='')
close(jsonurl)

str(XML::xmlToList(response1))
str(RJSONIO::fromJSON(response2))
test <- xmlParse("http://www.colourlovers.com/api/color/6B4106", options = NOCDATA)
res <- xmlToList(test)

> res$color$title
[1] "wet dirt"
>