2015-06-19 2 views
1

Я пытаюсь импортировать данные из XML-ответа в лист Excel, и у меня возникают трудности с повторяющимися дочерними узлами под одним родительским узлом. Мне нужно иметь возможность импортировать категории CategoryID, CategoryName и CategoryParentName для каждой категории. Я смог получить первые два, но не могу определить значение CategoryParentName с момента его повторения. XML выглядит следующим образом.VBA Импорт нескольких дочерних элементов 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

ответ

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 

Вы хотите выбрать узлы CategoryParentName, относящиеся к текущему узлу RecommendedCategory. Ваш исходный код вернул бы все имена CategoryParentNames (которые соответствовали выражению selectNodes), независимо от того, какой узел предлагаемой категории они связаны с

+1

Спасибо! Я вижу, что я сейчас делаю неправильно. Код работает отлично. Честно говоря, этот проект - моя первая кодировка, отличная от arduino и labview, поэтому я очень ценю помощь! –

Смежные вопросы