Запрос XML, удовлетворяющий двум условиям с Excel VBA - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю код Excel VBA для запроса значения, удовлетворяющего двум условиям.

XML данные равны

<?xml version="1.0" encoding="utf-8"?>
<Sales>
    <Sale>
        <Name>John</Name>
        <Area>NY</Area>
        <Data Date="20200401">
            <Target>110</Target>
            <Actual>80</Actual>
        </Data>
        <Data Date="20200402">
            <Target>110</Target>
            <Actual>80</Actual>
        </Data>
    </Sale>
</Sales>

, а код VBA аналогичен приведенному ниже,

Dim doc As Object

Set doc = CreateObject("MSXML2.DOMDocument")
doc.async = False: doc.validateOnParse = False
doc.Load ("C:\vb\sales.xml")

Set Nodes = doc.SelectNodes("//Sales/Sale[Name='John' and /Data/@Date='20200401']/Data")

For Each Node In Nodes
     Debug.Print Node.SelectSingleNode("Actual").Text
Next Node

Set doc = Nothing

Указанный ниже код неверен, не могли бы вы порекомендовать его исправить?

doc.SelectNodes("//Sales/Sale[Name='John' and /Data/@Date='20200401']/Data")

1 Ответ

0 голосов
/ 18 апреля 2020

Ваше выражение XPath содержит небольшую ошибку. Путь /Data/@Date='20200401' является абсолютным (относительно узла документа) и не относится к узлу контекста Sale.
. Поэтому используйте

//Sales/Sale[Name='John' and Data/@Date='20200401']/Data

, и вы можете выбрать Data элемент с заданными свойствами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...