如何在R中循环浏览xml节点?

我有一个需求,就是把一个xml文档分割成多个节点;然后把每个节点分别分割成更多的子节点,我使用的是XML包中的xpathSApplygetNodeSet函数。我使用的是XML包中的xpathSApplygetNodeSet函数。但似乎一旦xml文档被分割成节点,每个节点现在都被认为是 “内部节点 “类,因此无法对其执行spath操作,除非我们使用saveXML()将其保存为xml。有什么办法可以解决这个问题,而不需要做一个savexml?例如,考虑一下下面的示例xml。

<array>
<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11111</StreetNumber>
        <StreetName>111th</StreetName>
        <StreetSuffix>Avenue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2015-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pierce</County>
      </GeographicData>
</ResidentialProperty>
<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11211</StreetNumber>
        <StreetName>11111334th</StreetName>
        <StreetSuffix>Av1enue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2017-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pie2rce</County>
      </GeographicData>
</ResidentialProperty>
</array>

我打算把上面的内容拆分成:1.两个独立的节点,根目录为ResidentialProperty2.两个独立的节点。然后能够对这些节点中的每个节点进行XPATH操作。

P.S:这是示例数据,与我正在处理的实际数据集并不相似。只是想用这个来解释我试图解决的问题。

解决方案:

EDIT : 我想我误解了这个问题。新的方法。

我们使用 xpathApply, toString.XMLNodexmlParseString 来提取2个对象中的特定节点。

解析XML文件并提取节点。

library(XML) :
doc=xmlParse("pathtoyourXML.xml")
result1=xmlParseString(toString.XMLNode(xpathApply(doc,"(//ResidentialProperty)[1]")))
result2=xmlParseString(toString.XMLNode(xpathApply(doc,"(//ResidentialProperty)[2]")))

我们有2个对象,我们用.NET来评估它们。

from.result1=xpathApply(result1,"//StreetAddress")
from.result2=xpathApply(result2,"//StreetAddress")

Sidenote : 你的XML是无效的。Listings元素不是封闭的。

EDIT 2 : 事实上,你可以在之前 “提取 “的节点集上使用XPathApply 。

foo=xpathApply(doc,"(//ResidentialProperty)[2]")
xpathApply(foo[[1]],"//StreetAddress")

foo 不包含之前xpath表达式的结果 ((//ResidentialProperty)[2])但整个XML节点集。

给TA打赏
共{{data.count}}人
人已打赏
未分类

是否为双线图

2022-9-9 9:32:18

未分类

exoplayer setPlayWhenReady()不能用,为什么?

2022-9-9 9:32:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索