Ваше выражение XPath не работает, потому что оно не соответствует тому, что вы думаете, оно соответствует.Запрос NameProduct
не найдет <NameProduct>
узлов где-либо в структуре XML, но только под текущим узлом (который в вашем случае является корневым узлом документа).Поскольку в <Products>
нет узлов <NameProduct>
, вы получаете пустой набор результатов.Отсутствующие атрибуты не имеют к этому никакого отношения.
То, что вам нужно, это выражение XPath //Product/NameProduct
(найдите <NameProduct>
узлов, которые являются непосредственными дочерними узлами <Product>
узлов в любом месте документа):
query = "//Product/NameProduct"
Set nodes = xml.selectNodes(query)
Двойная косая черта, по сути, означает «где-нибудь внизу».
Пожалуйста, ознакомьтесь с тем, как работает XPath .
В качестве примечания:Msxml2.DOMDocument.3.0
глючит и не должен больше использоваться.Используйте Msxml2.DOMDocument.6.0
вместо этого.Кроме того, вы можете отключить асинхронную загрузку вашего XML-файла, чтобы убедиться, что документ полностью загружен, прежде чем вы начнете его обрабатывать:
Set xml = CreateObject("Msxml2.DOMDocument.6.0")
xml.Async = False
ok = xml.Load("C:\ProgramData\xmlfile.xml")