正在从 XML 节点集中解析 R:Extract 数据框中的 XML 文件
Parsing XML files in R:Extract dataframe from XML nodeset
我的样本XML
- <Inrix responseId="123" statusText="" createdDate="2016-01-29T05:57:00Z">
- <SegmentSpeedResultSet coverage="255">
- <SegmentSpeedResults timestamp="2016-01-29T05:56:47Z">
- <score="10" speed="57" code="4814018">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
- <score="30" speed="57" code="4814018" cvalue="57">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
</SegmentSpeedResults>
</SegmentSpeedResultSet>
</Inrix>
我想提取分数等于 30 时所有条目的 "speed"、"code" 和 "cvalue"。cvalue 仅在分数为 30 时存在,否则将被忽略。目前我的代码是
input <- xmlParse("20160128-235648.xml")
nodes <- getNodeSet(input,"//Segment[@score='30']")
这是在创建 XML 节点集 "nodes",仅当分数为 30 时才包含数据。看起来像这样
[[4584]]
<Segment code="63365958" speed="41" score="30" c-value="0">
<SubSegment speed="41" offset="0,433"/>
</Segment>
attr(,"class")
[1] "XMLNodeSet"
但是,我无法将此 XML 节点集转换为值为 "code"、"cvalue"、速度的数据帧。lapply(nodes, function (x) xmlSApply(x,xmlValue))
正在提取空白向量来自 "Subsegment" 而不是 "Segment".
我还需要将 "timestamp" 作为单独的变量存储在 "SegmentSpeedResults" 中。
使用 xAttrs 进行 sapply 解决了我在节点 "Segment" 下提取值的问题。这对我来说很好
nodes <- getNodeSet(input,"//Segment[@score='30']")
all_parameters <- sapply(nodes, xmlAttrs)
我的样本XML
- <Inrix responseId="123" statusText="" createdDate="2016-01-29T05:57:00Z">
- <SegmentSpeedResultSet coverage="255">
- <SegmentSpeedResults timestamp="2016-01-29T05:56:47Z">
- <score="10" speed="57" code="4814018">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
- <score="30" speed="57" code="4814018" cvalue="57">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
</SegmentSpeedResults>
</SegmentSpeedResultSet>
</Inrix>
我想提取分数等于 30 时所有条目的 "speed"、"code" 和 "cvalue"。cvalue 仅在分数为 30 时存在,否则将被忽略。目前我的代码是
input <- xmlParse("20160128-235648.xml")
nodes <- getNodeSet(input,"//Segment[@score='30']")
这是在创建 XML 节点集 "nodes",仅当分数为 30 时才包含数据。看起来像这样
[[4584]]
<Segment code="63365958" speed="41" score="30" c-value="0">
<SubSegment speed="41" offset="0,433"/>
</Segment>
attr(,"class")
[1] "XMLNodeSet"
但是,我无法将此 XML 节点集转换为值为 "code"、"cvalue"、速度的数据帧。lapply(nodes, function (x) xmlSApply(x,xmlValue))
正在提取空白向量来自 "Subsegment" 而不是 "Segment".
我还需要将 "timestamp" 作为单独的变量存储在 "SegmentSpeedResults" 中。
使用 xAttrs 进行 sapply 解决了我在节点 "Segment" 下提取值的问题。这对我来说很好
nodes <- getNodeSet(input,"//Segment[@score='30']")
all_parameters <- sapply(nodes, xmlAttrs)