2015-05-21 5 views
0

Не удается получить XPath работать для меня в предпоследней строке ниже:VBA XPath находя узлы

Sub x() 
Dim sXML As String 
sXML = "<?xml version=""1.0"" standalone=""yes""?>" 
sXML = "<NewDataSet><MyTable>" 
sXML = sXML & "  <Active>true</Active>" 
sXML = sXML & "  <SQLServer>APCD03</SQLServer>" 
sXML = sXML & "  <SQLDatabase>OIS</SQLDatabase>" 
sXML = sXML & " </MyTable>" 
sXML = sXML & " <MyTable>" 
sXML = sXML & "  <Active>false</Active>" 
sXML = sXML & "  <SQLServer>APCD04</SQLServer>" 
sXML = sXML & "  <SQLDatabase>OIS</SQLDatabase>" 
sXML = sXML & " </MyTable></NewDataSet>" 

Dim xDoc As New MSXML2.DOMDocument 
Dim nodelist As IXMLDOMNodeList 
Dim node As IXMLDOMNode 
xDoc.loadXML (sXML) 

Set nodelist = xDoc.documentElement.SelectNodes("MyTable") ' finds all nodes 
Debug.Print nodelist(0).XML ' see example 

Set node = xDoc.SelectSingleNode("MyTable[Active='true']") ' can't find 'Active' node 
Debug.Print node.Text 

End Sub 

Вот Нодлист (0) .XML:

<MyTable> 
    <Active>true</Active> 
    <SQLServer>APCD03</SQLServer> 
    <SQLDatabase>OIS</SQLDatabase> 
</MyTable> 

Как я используйте SelectSingleNode(), чтобы найти «активный» узел?

ответ

0

Вам не хватает DocumentElement. Вы можете использовать:

Set node = xDoc.DocumentElement.SelectSingleNode("MyTable/Active[text()='true']") 

или

Set node = xDoc.DocumentElement.SelectSingleNode("MyTable/Active[.='true']") 
+0

Закрыть, но они возвращают только элемента, а не какой узел содержит Active = True. Мне нужно извлечь информацию сервера SQL для активного узла. «MyTable [Active =« true »] работал как XPath. – rheitzman

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