我必须错过一些非常明显的东西,我终于放弃了试图找出问题所在。我试图搜索一小段XML来查找所有<Parent>
个节点。我使用的是R 3.2.2和XML包。这是带有示例XML的代码:
library(XML)
example_xml <- paste(
'<?xml version="1.0"?>',
'<GetProductCategoriesForASINResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">',
'<GetProductCategoriesForASINResult>',
'<Self>',
'<ProductCategoryId>11056341</ProductCategoryId>',
'<ProductCategoryName>Chicken</ProductCategoryName>',
'<Parent>',
'<ProductCategoryId>11056281</ProductCategoryId>',
'<ProductCategoryName>Dog</ProductCategoryName>',
'<Parent>',
'<ProductCategoryId>11055991</ProductCategoryId>',
'<ProductCategoryName>Monkey</ProductCategoryName>',
'<Parent>',
'<ProductCategoryId>11055981</ProductCategoryId>',
'<ProductCategoryName>Frog</ProductCategoryName>',
'<Parent>',
'<ProductCategoryId>3760911</ProductCategoryId>',
'<ProductCategoryName>Iguana</ProductCategoryName>',
'</Parent>',
'</Parent>',
'</Parent>',
'</Parent>',
'</Self>',
'</GetProductCategoriesForASINResult>',
'<ResponseMetadata>',
'<RequestId>abs123</RequestId>',
'</ResponseMetadata>',
'</GetProductCategoriesForASINResponse>',
sep = ''
)
categories_xml <- xmlTreeParse(example_xml, useInternalNodes = TRUE)
root <- xmlRoot(categories_xml)
category_nodes <- getNodeSet(root, '//Parent')
我希望category_nodes
包含4个节点,但它返回0。
答案 0 :(得分:1)
您必须在xpath表达式中使用带有命名空间的元素:
getNodeSet(root, '//as:Parent', namespaces = c(as="http://mws.amazonservices.com/schema/Products/2011-10-01"))
正如nicola指出的那样,你可以从元素中获取命名空间,它可以为你提供:
getNodeSet(root, '//as:Parent', namespaces = c(as=xmlNamespace(root)))