gpt4 book ai didi

xml - 在 R 中解析 XML 响应

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:07 25 4
gpt4 key购买 nike

我目前有一个来自 SOAP API 调用的 XML 响应,我已将其解析为 XMLInternalDocument美好的。我无法从已解析的响应中提取特定节点。

以下是我尝试从 XML 响应中获取元素的方法。

library(XML)

responseparsed <- XML::xmlParse("response2.xml")
getNodeSet(responseparsed, "//Category")

我得到的响应是一个空列表(即没有我理解的内容)

# list()
# attr(,"class")
# [1] "XMLNodeSet"

如果可能的话,我最终希望将我的 XML 响应放入 data.frame 中,因此非常感谢您提供一些指示,因为我也无法获得 xmlToList。要么因为<header>工作和 < body>两者都在 XML 数据包中。

如果您采用以下摘录并创建一个名为 response2.xml 的 XML 文件那么你应该能够重现我的问题。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>RetrieveResponse</wsa:Action>
<wsa:MessageID>urn:uuid:mymessageid</wsa:MessageID>
<wsa:RelatesTo>urn:uuid:relatestoid</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsse:Security><wsu:Timestamp wsu:Id="Timestamp-c74b9126-8c79-4624-abd1-de4021ce1096">
<wsu:Created>2015-08-13T12:38:54Z</wsu:Created>
<wsu:Expires>2015-08-13T12:43:54Z</wsu:Expires>
</wsu:Timestamp></wsse:Security>
</soap:Header>
<soap:Body>
<RetrieveResponseMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
<OverallStatus>OK</OverallStatus>
<RequestID>myanonrequestid</RequestID>
<Results xsi:type="List">
<Client>
<ID>6212693</ID>
</Client>
<PartnerKey xsi:nil="true" />
<ID>537</ID>
<ObjectID xsi:nil="true" />
<ListName>All Subscribers</ListName>
<Category>2151</Category>
<Type>Private</Type>
</Results>
<Results xsi:type="List">
<Client>
<ID>6212693</ID>
</Client>
<PartnerKey xsi:nil="true" />
<ID>1217</ID>
<ObjectID xsi:nil="true" />
<ListName>list A</ListName>
<Category>3038</Category>
<Type>Private</Type>
</Results>
<Results xsi:type="List">
<Client>
<ID>6212693</ID>
</Client><PartnerKey xsi:nil="true" />
<ID>1434</ID><ObjectID xsi:nil="true" />
<ListName>List B</ListName>
<Category>6362</Category>
<Type>Private</Type>
</Results>
<Results xsi:type="List">
<Client>
<ID>6212693</ID>
</Client>
<PartnerKey xsi:nil="true" />
<ID>1435</ID>
<ObjectID xsi:nil="true" />
<ListName> List C</ListName>
<Category>6362</Category>
<Type>Private</Type>
</Results>
</RetrieveResponseMsg>
</soap:Body>
</soap:Envelope>

最佳答案

CategoryRetrieveResponseMsg 祖先元素继承默认命名空间。要使用 XPath 引用命名空间中的元素,您需要映射一个前缀以指向命名空间 uri,并在您的 XPath 中使用该前缀。我对 r 不是很熟悉,但我认为它应该是这样的:

getNodeSet(responseparsed, "//d:Category", c(d="http://exacttarget.com/wsdl/partnerAPI"))

关于xml - 在 R 中解析 XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com