使用XPath搜索XML不返回任何节点

时间:2015-11-21 09:30:01

标签: xml r xpath

我必须错过一些非常明显的东西,我终于放弃了试图找出问题所在。我试图搜索一小段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。

1 个答案:

答案 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)))