У меня есть следующий код в VBAменяется для каждого цикла в цикл
Dim userBeanList As MSXML2.IXMLDOMNodeList
Dim userbean As MSXML2.IXMLDOMNode
Dim beanChild As MSXML2.IXMLDOMNode
XMLDOC.Load ("https://www.catch.api")
r = 4
Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']")
For Each userbean In userBeanList
For Each beanChild In userbean.ChildNodes
If beanChild.nodeName = "catch" Then GoTo NextIteration
Sheets("Sheet2").Cells(r, 1) = beanChild.nodeName
Sheets("Sheet2").Cells(r, 2) = beanChild.Text
r = r + 1
NextIteration:
Next beanChild
Next userbean
В настоящее время я цикл через все узлы, а затем в этом случае игнорируя узел называется «поймать», а затем перейдя в следующую итерацию, так как я не требую этого значения узла или узла. Вместо того, чтобы делать это, как бы я изменил свой цикл на тот, где я могу просто перейти непосредственно к узлам, представляющим интерес, и поэтому не нужно пропускать итерации, которые просто кажутся неэффективными?
///// после помощи парфе
Dim userBeanList As MSXML2.IXMLDOMNodeList
Dim userbean As MSXML2.IXMLDOMNode
Dim beanChild As MSXML2.IXMLDOMNode
XMLDOC.Load ("http://www.catch.api")
r = 4
Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(local-name)='catch']")
For Each userbean In userBeanList
Sheets("Sheet2").Cells(r, 1) = userbean.nodeName
Sheets("Sheet2").Cells(r, 2) = userbean.Text
r = r + 1
Next userbean
http://stackoverflow.com/questions/24188773/xpath-to-select-all-and-exclude-child-and-its-children –
Это может быть немного более эффективным, чтобы сказать это beanChild.nodeName <> «catch» then do stuff – justkrys