【发布时间】:2013-03-08 17:35:30
【问题描述】:
我正在尝试使用this excellent example 将一些 XML 代码转换为 R 数据框。不幸的是,自闭合标签似乎阻止了这种转换,我对 XML(和 R XML 包)的理解充其量只是新手。
根据this page at w3schools,看起来自闭合标签在 XML 中是合法的,所以我试图解析的代码并不是很不正常。
下面的 R 代码将产生我遇到的问题。如果您删除 <AlternateText/> 标记,代码将按我的预期工作。
另外,奇怪的是,如果你把它改成<AlternateText xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>,那么它也可以工作。这种行为是预期的吗?
我想简单地从对象x 中删除所有自闭合标签,或者我想重新标记它们,这样它们就不会导致错误——有效地将<AlternateText/> 更改为@987654327 之类的东西@。
x <-
'<outer>
<ProviderURL>
<URLCode>Valid</URLCode>
<URLAddress>http://mypage.com</URLAddress>
<AlternateText/>
</ProviderURL>
</outer>'
library( plyr )
library( XML )
y <-
xmlTreeParse(
x ,
asText = TRUE ,
useInternalNodes = TRUE
)
ldply( xmlToList( y ) , data.frame )
这段代码给了我:
Error in data.frame(URLCode = "Valid", URLAddress = "http://mypage.com", :
arguments imply differing number of rows: 1, 0
【问题讨论】:
-
我认为您发布的示例与您所描述的不符。你期望
<AlternateText/>的输出是什么? -
@RicardoSaporta 查看编辑.. 当您运行该代码块时,您有什么不同吗?
-
该错误与列表列表有关。不带 xml 标签。即,运行这个:
aL <- list(list(1:3, 1:2), 1:2); ldply(aL, data.frame) -
@RicardoSaporta 我知道这就是它最终崩溃的地方,但问题出在自闭标签上——如果我能消除它们,它会解决吗? :)