2015-06-02 2 views
1

Как выполнить поиск по структуре XML для поиска определенного узла с использованием VBA на основе имени и значения узла? Другими словами, возможно ли выполнить SQL-подобную команду в структуре XML, чтобы найти то, что я ищу?VBA и XML - Поиск трехмерного XML-документа для определения местонахождения определенного узла по его значению

Например, позволяет сказать, что у меня есть это XML-структуру:

<House> 
<Kitchen> 
    <Appliance> 
     <Name>Refrigerator</Name> 
     <Brand>Maytag</Brand> 
     <Model>F2039-39</Model> 
    </Appliance> 
    <Appliance> 
     <Name>Toaster</Name> 
     <Brand>Black and Decker</Brand> 
     <Model>B8d-k30</Model> 
    </Appliance> 
</Kitchen> 

Я хотел бы способ, чтобы найти все тостеры, которые сделаны черными и Decker, с моделью B8d -k30 с использованием VBA. Это возможно?

+0

Быстрый и грязный способ, сохранить файл XML (если ИТС некоторые строки, вы можете использовать VBA для его сохранения). Затем загрузите XML в рабочую книгу с помощью 'workbook.open'. Теперь вы можете видеть данные в табличном формате. Используйте VBA/Формулы, чтобы найти свои данные. – cyboashu

ответ

1

Существует язык запросов для XML, поддерживаемый VBA, а именно XPath.

«Я хотел бы способ, чтобы найти все тостеры, которые сделаны черными и Decker, с моделью B8d-K30»

В XPath, которые могут быть переведены на следующее:

//Appliance[Name='Toaster' and Brand='Black and Decker' and Model='B8d-k30'] 

краткое объяснение о вышеуказанном: XPath

  • //Appliance: найти все <Appliance> элементы, в любом месте в документе XML
  • []: фильтр текущего контекста элемента (<Appliance> в данном конкретном случае) со следующими критериями ....
  • Name='Toaster': есть, по крайней мере, один дочерний элемент <Name>, имеющее значение равно "Toaster"
  • and Brand='Black and Decker': и, по крайней мере, один дочерний элемент <Brand>, имеющее значение равно "Black and Decker"
  • and Model='B8d-k30': и имеет, по крайней мере, один дочерний элемент, имеющий <Model> Val ue равно "B8d-k30"

Я не знаком с VBA, поэтому у меня нет образца кода VBA. В любом случае, если вы ищете в Интернете, есть много примеров того, как выполнить запрос xpath в VBA, один из примеров, который я нашел, находится в this link.

для справок:

+0

Спасибо. И для будущих читателей эти ссылки будут работать вместе с этим ответом. http: // stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops http://stackoverflow.com/questions/5188999/query-and -parse-xml-attribute-value-in-xls-using-vba –

+0

Дополнительный вопрос: что, если запрос имел комбинацию ands и ors? Например, я хочу, чтобы все элементы с тостерами имели либо марку черных, и декодеров, либо набор инструментов (не указан в приведенном выше примере)? –

+0

Ничего, я понял. Чтобы добавить AND и OR, используйте круглые скобки. –

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