У меня есть большой XML-файл, который я пытаюсь проанализировать с помощью DOM. То, что я пытаюсь сделать, это только вытащить информацию из узла, если у родителя есть определенный атрибут «id».VBA DOM Найти конкретные узлы с атрибутами
Например, если я хочу вытащить TITLE или AUTHOR для книг, содержащих «id = Adventure» - как бы я это сделал, используя DOM?
<?xml version="1.0"?>
<catalog>
<book id="Adventure">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<price>44.95</price>
</book>
<book id="Adventure">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<price>5.95</price>
</book>
<book id="Adventure">
<author>Boal, John</author>
<title>Mist</title>
<price>15.95</price>
</book>
<book id="Mystery">
<author>Ralls, Kim</author>
<title>Some Mystery Book</title>
<price>9.95</price>
</book>
</catalog>
Теперь, используя этот код:
Sub mySub()
Dim mainWorkBook As Workbook
Dim XCMFILE As Variant
Dim BookType As String
Dim BookTitle As Variant
Dim Title As String
Dim n As IXMLDOMNode
Dim i As Integer
Set mainWorkBook = ActiveWorkbook
Set XCMFILE = CreateObject("Microsoft.XMLDOM")
XCMFILE.Load (XCMFileName) 'Load XCM File
i = 0
For Each n In XCMFILE.SelectNodes("/catalog/book")
BookType= n.Attributes.getNamedItem("id").Text 'Search for id attribute within node
If BookID = "Adventure" Then
Set BookTitle = = XCMFILE.SelectNodes("/catalog/book/title/text()")
Title = BookTitle(i).NodeValue
mainWorkBook.Sheets("Sheet1").Range("B" & i + 3).Value = BookTitle'Prints values into B column
i = i + 1
EndIf
Next
End Sub
Я не знаю, как правильно увеличивать только тянуть узлы, которые соответствуют моей спецификации/категорию.
Спасибо за любые советы и указатели - я ценю это.
XPath в 'XCMFILE.SelectNodes («/ каталог/книги»)' должны быть в состоянии выбрать только 'ID = Adventure' узлы, поэтому они были бы единственными узлами, которые вам нужны для повторения. –
Я не совсем уверен, что вы подразумеваете под XPath. Вы говорите, что, поскольку Adventure - это первый тип, который появляется, это будет только для этого? – NRH
Строка, которую вы там положили, называется XPath; есть способ заставить его возвращать только те узлы, которые вас интересуют, искать «узлы выбора xpath с определенным значением атрибута»;) –