解析xmlToList中的CDATA字段
我在使用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元素 代码如下:解析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格式: 正如您在第一
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"
>