【问题标题】:VBA Importing multiple XML children under a single parent nodeVBA 在单个父节点下导入多个 XML 子节点
【发布时间】:2015-06-19 08:41:37
【问题描述】:

我正在尝试将 XML 响应中的数据导入 Excel 工作表,但在单个父节点下重复子节点时遇到了困难。我需要能够为每个类别导入 CategoryID、CategoryName 和 CategoryParentName 行。我已经能够获得前两个,但无法弄清楚 CategoryParentName 自重复以来。 XML如下。

<GetSuggestedCategoriesResponse xmlns="urn:ebay:apis:eBLBaseComponents">
  <Timestamp>2010-01-19T22:08:02.568Z</Timestamp>
  <Ack>Success</Ack>
  <Version>647</Version>
  <Build>E647_CORE_BUNDLED_10438248_R1</Build>
  <SuggestedCategoryArray>
    <SuggestedCategory>
      <Category>
        <CategoryID>18871</CategoryID>
        <CategoryName>Memory Cards</CategoryName>
        <CategoryParentID>625</CategoryParentID>
        <CategoryParentID>3327</CategoryParentID>
        <CategoryParentID>18866</CategoryParentID>
        <CategoryParentName>Cameras & Photo</CategoryParentName>
        <CategoryParentName>Camera Accessories</CategoryParentName>
        <CategoryParentName>Digital Camera Accessories</CategoryParentName>
      </Category>
      <PercentItemFound>4</PercentItemFound>
    </SuggestedCategory>
    <SuggestedCategory>
      <Category>
        <CategoryID>48629</CategoryID>
        <CategoryName>Color</CategoryName>
        <CategoryParentID>293</CategoryParentID>
        <CategoryParentID>14948</CategoryParentID>
        <CategoryParentID>48633</CategoryParentID>
        <CategoryParentID>48638</CategoryParentID>
        <CategoryParentID>48628</CategoryParentID>
        <CategoryParentName>Electronics</CategoryParentName>
        <CategoryParentName>Gadgets</CategoryParentName>
        <CategoryParentName>Surveillance</CategoryParentName>
        <CategoryParentName>Surveillance Cameras</CategoryParentName>
        <CategoryParentName>Wired Cameras</CategoryParentName>
      </Category>
      <PercentItemFound>4</PercentItemFound>
    </SuggestedCategory>

这是我对 VBA 代码的尝试。非常感谢任何帮助!

Sub CategoryResponse()
Outputrow = Sheet1.Range("E1") + 7
        
Nodes = "GetSuggestedCategoriesResponse/SuggestedCategoryArray/SuggestedCategory"
For Each CAT In responseItem.SelectNodes(Nodes)
   Outputcol = 3
   Sheet1.Range("A" & Outputrow).Value = CAT.SelectSingleNode("PercentItemFound").Text
   Sheet1.Range("B" & Outputrow).Value = CAT.SelectSingleNode("Category/CategoryID").Text
        
   Nodes1 = "GetSuggestedCategoriesResponse/SuggestedCategoryArray/SuggestedCategory/CategoryParentName"
   For Each PAR In responseItem.SelectNodes(Nodes1)
      Sheet1.Cells(Outputrow, Outputcol).Value = PAR.SelectSingleNode("CategoryParentName").Text
      Outputcol = Outputcol + 1
   Next PAR
   
   Sheet1.Cells(Outputrow, Outputcol).Value = UST.SelectSingleNode("Category/CategoryName").Text
   Outputrow = Outputrow + 1
Next UST

End Sub

【问题讨论】:

    标签: xml excel vba


    【解决方案1】:

    Nodes1 应该相对于For Each CAT ... 循环中的当前节点创建,而不是相对于responseItem。试试:

    Nodes1 = "Category/CategoryParentName"
    For Each PAR In CAT.SelectNodes(Nodes1)
       Sheet1.Cells(Outputrow, Outputcol).Value = PAR.Text
       Outputcol = Outputcol + 1
    Next PAR
    

    您要选择与当前 SuggestedCategory 节点相关的 CategoryParentName 节点。无论它们与哪个 SuggestedCategory 节点相关,您的原始代码都会返回所有 CategoryParentNames(与 selectNodes 表达式匹配)

    【讨论】:

    • 谢谢!我现在可以看到我做错了什么。该代码完美运行。老实说,这个项目是我第一次编写除 arduino 和 labview 之外的代码,所以我非常感谢您的帮助!
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多