Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
如何处理R XML中的0长度字符向量_Xml_R_Xml Parsing_Dataframe - Fatal编程技术网

如何处理R XML中的0长度字符向量

如何处理R XML中的0长度字符向量,xml,r,xml-parsing,dataframe,Xml,R,Xml Parsing,Dataframe,我正在解析来自web服务的XML文件,然后将其转换为data.frame。在这里,我列出了我的示例代码,它实际上是我的直接副本 我承认我对XML文件的使用相当陌生,但我需要将其解析为数据框架 library(RCurl) library(XML) xml.url <-('webservice url that links to an XML document') xml.file <- xmlTreeParse(xml.url) xmlto

我正在解析来自web服务的XML文件,然后将其转换为data.frame。在这里,我列出了我的示例代码,它实际上是我的直接副本

我承认我对XML文件的使用相当陌生,但我需要将其解析为数据框架

    library(RCurl)
    library(XML)
    xml.url <-('webservice url that links  to an XML document')
    xml.file <- xmlTreeParse(xml.url)
    xmltop <- xmlRoot(xml.file)

    Data <- xmlSApply(xmltop,function(x) xmlSApply(x,xmlValue))
    Data <- data.frame(t(Data),row.names=NULL)
除了数据帧中的列表中的0个字符长度向量外,其他都很好。我假设,因为XML文件的解析器检测到它们,所以它必须以列表的形式存储它们,然后将列表包装在数据帧中,否则向量的长度将不相同,并且将是错误的。我更愿意设置一个选项,将它们转换为NA或只是“”,并且只要有一个向量的数据帧,而不是列表,如果可能的话,甚至可以将每个列格式化为适当的格式。主要是因为我需要在列之间编写逻辑测试

我习惯于处理类似这样的结构

> Data[,"Description_of_location"]
[1]""

[2]"By swisspark nursing home"

[3]""

[4]""
相反,我得到了

> Data[,"Description_of_location"]

$row
character(0)

$row
[1] "By swisspark nursing home"

$row
character(0)

$row
character(0)
下面是XML文档的一个示例

-<data version="1.0">


-<row>

<start type="JAVA_ROSA_DATETIME">05/11/2014 06:59:48 UTC</start>

<end type="JAVA_ROSA_DATETIME">05/11/2014 14:16:23 UTC</end>

<today type="JAVA_ROSA_DATE">05/11/2014</today>


-<deviceid type="STRING">

<![CDATA[358870052616368]]>

</deviceid>


-<subscriberid type="STRING">

<![CDATA[404310209661081]]>

</subscriberid>


-<simid type="STRING">

<![CDATA[89913100002096610814]]>

</simid>


-<phonenumber type="STRING">

<![CDATA[918420272664]]>

</phonenumber>


-<mobilekey type="STRING">

<![CDATA[ag9zfmRlbGFndWFtb2JpbGVyFwsSCk1vYmlsZVVuaXQYgICAgMD6-wkM]]>

</mobilekey>


-<projectkey type="STRING">

<![CDATA[ag9zfmRlbGFndWFtb2JpbGVyFAsSB1Byb2plY3QYgICAgKD9hQkM]]>

</projectkey>


-<recordid type="STRING">

<![CDATA[mannaenergy$$05082014141658$$Published&amp;&amp;12]]>

</recordid>

<Record_Name type="STRING"/>

<Watersource_GPS_Cords type="GEOPOINT">22.****:88.****:0.0:26.0</Watersource_GPS_Cords>


-<State_Name type="STRING">

<![CDATA[West Bengal]]>

</State_Name>


-<District_Name type="STRING">

<![CDATA[Kolkata]]>

</District_Name>


-<Block_Name type="STRING">

<![CDATA[Bikram]]>

</Block_Name>


-<Panchayat_Name type="STRING">

<![CDATA[Ashok nagar]]>

</Panchayat_Name>


-<Village_Name type="STRING">

<![CDATA[East lake]]>

</Village_Name>


-<Habitation_Name type="STRING">

<![CDATA[Merlin colony]]>

</Habitation_Name>


-<Unique_water_source_ID type="STRING">

<![CDATA[15]]>

</Unique_water_source_ID>

<Description_of_location type="STRING"/>



-<Type_of_Water_Source type="STRING">

<![CDATA[Public_tap]]>

</Type_of_Water_Source>

<Take_a_sample_for_chemical_tes type="STRING"/>

<Turbidity_TU_input type="STRING"/>

<Turbidity_FAU_input type="DECIMAL"/>

<Turbidity_FAU_range type="STRING"/>

<Warning_turb_FAU type="INTEGER"/>

<Turbidity_NTU_input type="DECIMAL">0.95</Turbidity_NTU_input>


-<Turbidity_NTU_range type="STRING">

<![CDATA[In_range]]>

</Turbidity_NTU_range>

<Warning_turb_NTU type="INTEGER"/>
-
-
2014年11月5日06:59:48 UTC
2014年11月5日14:16:23 UTC
05/11/2014
-
-
-
-
-
-
-
22.****:88.****:0.0:26.0
-
-
-
-
-
-
-
-
0.95
-
我很抱歉,如果这是信息过载,我试图提供一切我能想到的,将被证明是有用的

总而言之。我试图解析这个XML文件,使0长度的字符向量在数据帧中变为空白或NA元素。如果我可以在数据框中的每列结构中反映每列的类型,那就有好处了。希望这足够清楚

非常感谢您提供的一切帮助。

查看后

useInternalNodes=TRUE
完全满足了我的要求

xml.file <- xmlTreeParse(xml.url,useInternalNodes = TRUE)
xmltop <- xmlRoot(xml.file)
Data <- xmlSApply(xmltop,function(x) xmlSApply(x,xmlValue))
Data <- data.frame(t(Data),row.names=NULL,stringsAsFactors=FALSE)
-<data version="1.0">


-<row>

<start type="JAVA_ROSA_DATETIME">05/11/2014 06:59:48 UTC</start>

<end type="JAVA_ROSA_DATETIME">05/11/2014 14:16:23 UTC</end>

<today type="JAVA_ROSA_DATE">05/11/2014</today>


-<deviceid type="STRING">

<![CDATA[358870052616368]]>

</deviceid>


-<subscriberid type="STRING">

<![CDATA[404310209661081]]>

</subscriberid>


-<simid type="STRING">

<![CDATA[89913100002096610814]]>

</simid>


-<phonenumber type="STRING">

<![CDATA[918420272664]]>

</phonenumber>


-<mobilekey type="STRING">

<![CDATA[ag9zfmRlbGFndWFtb2JpbGVyFwsSCk1vYmlsZVVuaXQYgICAgMD6-wkM]]>

</mobilekey>


-<projectkey type="STRING">

<![CDATA[ag9zfmRlbGFndWFtb2JpbGVyFAsSB1Byb2plY3QYgICAgKD9hQkM]]>

</projectkey>


-<recordid type="STRING">

<![CDATA[mannaenergy$$05082014141658$$Published&amp;&amp;12]]>

</recordid>

<Record_Name type="STRING"/>

<Watersource_GPS_Cords type="GEOPOINT">22.****:88.****:0.0:26.0</Watersource_GPS_Cords>


-<State_Name type="STRING">

<![CDATA[West Bengal]]>

</State_Name>


-<District_Name type="STRING">

<![CDATA[Kolkata]]>

</District_Name>


-<Block_Name type="STRING">

<![CDATA[Bikram]]>

</Block_Name>


-<Panchayat_Name type="STRING">

<![CDATA[Ashok nagar]]>

</Panchayat_Name>


-<Village_Name type="STRING">

<![CDATA[East lake]]>

</Village_Name>


-<Habitation_Name type="STRING">

<![CDATA[Merlin colony]]>

</Habitation_Name>


-<Unique_water_source_ID type="STRING">

<![CDATA[15]]>

</Unique_water_source_ID>

<Description_of_location type="STRING"/>



-<Type_of_Water_Source type="STRING">

<![CDATA[Public_tap]]>

</Type_of_Water_Source>

<Take_a_sample_for_chemical_tes type="STRING"/>

<Turbidity_TU_input type="STRING"/>

<Turbidity_FAU_input type="DECIMAL"/>

<Turbidity_FAU_range type="STRING"/>

<Warning_turb_FAU type="INTEGER"/>

<Turbidity_NTU_input type="DECIMAL">0.95</Turbidity_NTU_input>


-<Turbidity_NTU_range type="STRING">

<![CDATA[In_range]]>

</Turbidity_NTU_range>

<Warning_turb_NTU type="INTEGER"/>
xml.file <- xmlTreeParse(xml.url,useInternalNodes = TRUE)
xmltop <- xmlRoot(xml.file)
Data <- xmlSApply(xmltop,function(x) xmlSApply(x,xmlValue))
Data <- data.frame(t(Data),row.names=NULL,stringsAsFactors=FALSE)
  str(Data[,1])
 chr [1:4] "05/11/2014 06:59:48 UTC" "05/11/2014 06:45:59 UTC" "05/11/2014 06:26:16 UTC" "05/11/2014 06:52:42 UTC"