У меня возникли проблемы с разбором XML, возвращаемого из API. Мое главное в этом состоит в том, чтобы получить «используемые» и «предельные» свойства одного из узлов (с xPath).Анализ XML в VBA
На данный момент я даже не успел изучить весь XML-дерево, так что здесь я приезжаю с просьбой о помощи
Возвращенный XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<QueryResultRecords xmlns="http://www.xmlns.loc/sub" type="application/some.app.query+xml" href="https://my.api.call.com/query?has_cheezburger" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xmlns.loc/sub http://my.api.address.com/schema/master.xsd">
<OnlyNodeType Name="name1" link="hhttp://my.api.address.com/a5d11b73dffe" Used="240640" Limit="0" />
<OnlyNodeType Name="name2" link="http://my.api.address.com/03b11042ccd4" Used="10240" Limit="409600" />
<OnlyNodeType Name="name3" link="http://my.api.address.com/1cf43be18e2e" Used="11934947" Limit="20971520" />
</QueryResultRecords>
Я примерно понять, как работает XMLDOM в VBA, но поиск в Интернете, мне удалось написать это, что, очевидно, не работает ...
Dim XMLDOC As MSXML2.DOMDocument60
Dim nodelist As IXMLDOMNodeList
Set XMLDOC = New MSXML2.DOMDocument60
XMLDOC.async = False
XMLDOC.validateOnParse = False
XMLDOC.Load (myhttpresponse)
Namespace = "xmlns: 'http://www.xmlns.loc/sub' "
Call XMLDOC.setProperty("SelectionNamespaces", Namespace)
Call XMLDOC.setProperty("SelectionLanguage", "XPath")
XPath = "/"
Set nodelist = XMLDOC.SelectNodes(XPath)
For i = 0 To nodelist.Length - 1
Set Node = nodelist.NextNode
Debug.Print Node.Text
Next i
Я думаю, что это проблема XML-Treeing (я не понял, что-то на XMLD om?) или xmlns/xsi, и там я полностью застрял.
Может ли кто-нибудь помочь мне в этом?
Я думаю, что вы мне очень помогли, спасибо :) Небольшая проблема: Dim OnlyNodeType Как MSXML2.DOMElement, похоже, не распознается VBA. Я загрузил MS XML v6.0, но никаких ссылок на это в любом случае. Я держал пари на вашей ошибке, но все же? – Ariel
Конечно, я имел в виду 'IXMLDOMElement'. Вы также можете использовать 'IXMLDOMNode'. Узел является базовым типом элемента DOM - он предлагает меньше методов и свойств, но взамен он работает для всех возможных типов результатов запроса XPath. Используйте Обозреватель объектов (F2 - VBA IDE), чтобы изучить различия между различными объектами. – Tomalak
Спасибо, действительно. Я все еще должен исправить xPath, который вы дали, что на самом деле '/ sub: QueryResultRecords/sub: OnlyNodeType' – Ariel