解析R中的XML文件,该文件的子节点的所有值都带有相同的标签

亚历克斯

我对XML文件的解析有疑问。然后,我放入函数和一个示例XML文件。我的问题是:在这个文件中,我可以解析子节点``item''和子节点``tag''而没有问题,但是当我尝试解析子节点prop时,我得到了一个包含所有值的字符串。XML解析功能无法区分它们,因为它们都具有相同的标签“ prop”。我需要将子节点值存储在data.frame内的单独列中,有什么方法可以做到这一点?

我的功能:

PARSE_INVENTORY_items<-function(DF_DEVICE_IDE_value, URL_DEVICE_value){
  require(XML)
  require(RCurl)
  host<-URL_DEVICE_value
  device<-"/devices/"
  ID_devices<-DF_DEVICE_IDE_value[1,1]

  inventory<-"/inventory"
  start_device<-"/start"

  FULL_url<-paste(host, device, ID_devices, inventory, sep="")
  FULL_url_start<-paste(host, device, ID_devices, start_device, sep="")

  URL_inventory<-gsub(" ","", FULL_url, fixed=TRUE)
  URL_start_device<-gsub(" ","", FULL_url_start, fixed=TRUE)

  httpGET(URL_start_device)

  XML_inventory_exists = url.exists(URL_inventory)
  # Regular HTTP
  if( XML_inventory_exists) {
    inventory = getURL(URL_inventory)
    inventory_xml <- xmlInternalTreeParse(inventory) 
    items <- getNodeSet(inventory_xml,"//data/inventory/items/item")
    DataFrame_inventory_items <- xmlToDataFrame(items)

    items_tags<-getNodeSet(inventory_xml, "//data/inventory/items/item/tags/tag")
    DataFrame_inventory_tags_subnode <- xmlToDataFrame(items_tags)

    #items_tags_props<-getNodeSet(inventory_xml, "//data/inventory/items/item/tags/tag/props/prop")
    #DataFrame_inventory_props_subnode_tag <- xmlToDataFrame(items_tags_props)

    DataFrame_inventory_items<-cbind(DataFrame_inventory_items,DataFrame_inventory_tags_subnode)
    #aux<-DataFrame_inventory_items
    #DataFrame_inventory_items<-subset(DataFrame_inventory_items, select=(-tags))
    return(DataFrame_inventory_items)
  }
}

XML文件示例

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
    <type>inventory</type>
    <ts>1396964708000</ts>
    <status>OK</status>
    <msg-version>2.0.0</msg-version>
    <op>inventory</op>
    <data>
        <advanNetId>AdvanNet-instance-00:26:b9:08:cd:e1-3161</advanNetId>
        <deviceId>adrd1</deviceId>
        <inventory>
            <class>INVENTORY</class>
            <deviceId>adrd1</deviceId>
            <timeWindow>2500</timeWindow>
            <items>
                <item>
                    <class>READ_EVENT</class>
                    <epc>00000000000000000000A200</epc>
                    <ts>1396964708122</ts>
                    <deviceId>adrd1</deviceId>
                    <tags>
                        <tag>
                            <class>CONTEXT_TAG_DATA</class>
                            <hexepc>00000000000000000000A200</hexepc>
                            <props>
                                <prop>RF_PHASE:154</prop>
                                <prop>READ_COUNT:1</prop>
                                <prop>RSSI:-55</prop>
                                <prop>TIME_STAMP:1396964708122</prop>
                                <prop>ANTENNA_PORT:1</prop>
                            </props>
                        </tag>
                    </tags>
                    <tag-rssi>-55.0</tag-rssi>
                    <tag-readcount>1</tag-readcount>
                    <tag-phase>154.0</tag-phase>
                </item>
            </items>
        </inventory>
    </data>
</inventory>
耶洛华德

因此,您的XML格式仍然不正确(缺少的结束标记<items>,但足够接近以致无法使用。

下面的代码创建从内容的数据帧<tags>元件,用1行的每个<tag>元件,并且具有用于列<class><hexepc>并且每个的<prop>元件。从不同的列名<prop>的元素被解析出来的文字的(因此,RF_PHASEREAD_COUNT等等)。请注意,如果每个参数<tag>都相同,则该方法有效<props>

在此示例中,您提供(更正)的xml称为xml.text

library(XML)
xml <- xmlInternalTreeParse(xml.text,useInternalNodes=T)

# add a few extra tag nodes - you have this already
tags <- xml["//data/inventory/items/item/tags"]
tag  <- xml["//data/inventory/items/item/tags/tag"]
addChildren(node=tags[[1]],xmlClone(tag[[1]]))
addChildren(node=tags[[1]],xmlClone(tag[[1]]))
addChildren(node=tags[[1]],xmlClone(tag[[1]]))

# this is where you start
tags  <- xml["//data/inventory/items/item/tags/tag"]
result <- do.call(rbind,lapply(tags,function(tag){
  class  <- xmlValue(tag["class"][[1]])
  hexepc <- xmlValue(tag["hexepc"][[1]])
  props  <- sapply(tag["props"]$props["prop"],xmlValue)
  props  <- strsplit(props,":")
  props  <- setNames(sapply(props,function(x)x[2]),sapply(props,function(x)x[1]))
  c(class=class,hexepc=hexepc,props)
}))
result <- data.frame(result)
#              class                   hexepc RF_PHASE READ_COUNT RSSI    TIME_STAMP ANTENNA_PORT
# 1 CONTEXT_TAG_DATA 00000000000000000000A200      154          1  -55 1396964708122            1
# 2 CONTEXT_TAG_DATA 00000000000000000000A200      154          1  -55 1396964708122            1
# 3 CONTEXT_TAG_DATA 00000000000000000000A200      154          1  -55 1396964708122            1
# 4 CONTEXT_TAG_DATA 00000000000000000000A200      154          1  -55 1396964708122            1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析R中的XML文件,该文件的子节点的所有值都带有相同的标签

来自分类Dev

无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

来自分类Dev

R中的XML解析器,带有分层节点,标签和值

来自分类Dev

删除xml文件中具有特定值的子节点

来自分类Dev

获取Groovy中XML节点的所有子节点的值

来自分类Dev

遍历 XML 的所有节点并解析存储在属性中的值

来自分类Dev

从C中的XML文件获取相同多个标签之间的所有信息

来自分类Dev

如何获取该文件夹中的所有文件

来自分类Dev

jQuery XML解析:选择包含具有特定值的特定标签的所有节点

来自分类Dev

解析多个XML,尽管并非所有文件都具有python元素

来自分类Dev

解析在Python中没有“根”节点的XML文件

来自分类Dev

C# XDocument 从 XML 文件中读取所有节点

来自分类Dev

使用JAVA中的DOM解析器,如何解析XML文件,其中有两个具有相同子标签的不同事务,而一个标签却不同?

来自分类Dev

R:将带有交易的XML解析为平面文件?

来自分类Dev

在目录中递归搜索所有xml文件以查找特定标签,并grep标记的值

来自分类Dev

从两个具有相同标签结构的xml文件的差异中创建一个节点

来自分类Dev

如何递归获取所有包含txt文件的目录,该文件的名称与Bash中包含目录的名称相同?

来自分类Dev

使用C#从xsd文件生成带有子节点的XML文件

来自分类Dev

如何使用c#读取XML文件中带有特定标签的所有数据?

来自分类Dev

在python中解析带有重点标记的xml文件

来自分类Dev

串联所有映射相同键中的值的文件

来自分类Dev

如何使用powershell仅导入父节点而从xml文件中保留所有子节点?

来自分类Dev

无法从XML文件获取所有标签

来自分类Dev

Java解析带有文件删除的XML

来自分类Dev

解析Java中的XML文件并输出所有错误

来自分类Dev

当确保所有其他列都相同时,仅从CSV文件中读取选定的列

来自分类Dev

XPath-选择一个名称相同的所有子节点本身都具有特定子节点的节点

来自分类Dev

XPath-选择一个名称相同的所有子节点本身都具有特定子节点的节点

来自分类Dev

SharedPreferences中的所有键都返回相同的值

Related 相关文章

  1. 1

    解析R中的XML文件,该文件的子节点的所有值都带有相同的标签

  2. 2

    无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

  3. 3

    R中的XML解析器,带有分层节点,标签和值

  4. 4

    删除xml文件中具有特定值的子节点

  5. 5

    获取Groovy中XML节点的所有子节点的值

  6. 6

    遍历 XML 的所有节点并解析存储在属性中的值

  7. 7

    从C中的XML文件获取相同多个标签之间的所有信息

  8. 8

    如何获取该文件夹中的所有文件

  9. 9

    jQuery XML解析:选择包含具有特定值的特定标签的所有节点

  10. 10

    解析多个XML,尽管并非所有文件都具有python元素

  11. 11

    解析在Python中没有“根”节点的XML文件

  12. 12

    C# XDocument 从 XML 文件中读取所有节点

  13. 13

    使用JAVA中的DOM解析器,如何解析XML文件,其中有两个具有相同子标签的不同事务,而一个标签却不同?

  14. 14

    R:将带有交易的XML解析为平面文件?

  15. 15

    在目录中递归搜索所有xml文件以查找特定标签,并grep标记的值

  16. 16

    从两个具有相同标签结构的xml文件的差异中创建一个节点

  17. 17

    如何递归获取所有包含txt文件的目录,该文件的名称与Bash中包含目录的名称相同?

  18. 18

    使用C#从xsd文件生成带有子节点的XML文件

  19. 19

    如何使用c#读取XML文件中带有特定标签的所有数据?

  20. 20

    在python中解析带有重点标记的xml文件

  21. 21

    串联所有映射相同键中的值的文件

  22. 22

    如何使用powershell仅导入父节点而从xml文件中保留所有子节点?

  23. 23

    无法从XML文件获取所有标签

  24. 24

    Java解析带有文件删除的XML

  25. 25

    解析Java中的XML文件并输出所有错误

  26. 26

    当确保所有其他列都相同时,仅从CSV文件中读取选定的列

  27. 27

    XPath-选择一个名称相同的所有子节点本身都具有特定子节点的节点

  28. 28

    XPath-选择一个名称相同的所有子节点本身都具有特定子节点的节点

  29. 29

    SharedPreferences中的所有键都返回相同的值

热门标签

归档