Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Снова XML парсинг, маленький вопрос  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
Друзья, подскажите по такому вопросу.
Вытаскиваю часть данных из XML, используя @class='com.nokia.srbts.tnl:IPADDRESSV4'. Т.к.
этот класс встречается несколько раз, то мне нужно знать, чему равен distName у него (см.картинку). По нему я понимаю к чему относится localIpAddr.
Можно конечно искать по @distName, но в нем меняются значения IPIF. Тогда надо знать сколько значений и каких в IPIF, для того чтобы загнать в переменную и пройтись в цикле. На мой взгляд - это будет не правильно.
В парсинге я несилён. Все наработки с этого форума.

Что дописать в коде, чтобы увидеть, чему равен distName?
И ещё. Знак любого символа какой в данном случае? Например попытался сделать так и не прокатило:
@distName='MRBTS-605775/TNLSVC-1/TNL-1/IPNO-1/IPIF-*/IPADDRESSV4-1']/p[@name='localIpAddr']
Думаю вопрос мой на поверхности лежит. Спасибо.

+
Private Sub Кнопка73_Click()
Dim strFileName As String, strNumBS As String, strSBTS As String
Dim objXmlDoc As Object ' MSXML2.DOMDocument
Dim objXmlSingleNode As Object 'MSXML2.IXMLDOMNode
Dim objXmlChildNode As Object 'MSXML2.IXMLDOMNode
Dim OAMIP$, DN$

On Error GoTo HandleErrors

strFileName = "c:test\test.XML"

If Len(strFileName) = 0 Then Exit Sub
If Len(Dir$(strFileName)) = 0 Then Exit Sub
'strNumBS = Split(Dir$(strFileName), "_")(2)
Set objXmlDoc = CreateObject("MSXML2.DOMDocument")

    With objXmlDoc
        .async = False
            If Not .Load(strFileName) Then
                MsgBox "Oops!!", vbCritical
                GoTo ExitHere
            End If
        Set objXmlSingleNode = .selectSingleNode("/raml/cmData/managedObject")
    End With
    If Not objXmlSingleNode Is Nothing Then
        With objXmlSingleNode
            Debug.Print .Attributes.getNamedItem("distName").Text
            Debug.Print .selectSingleNode("p[@name='btsName']").Text
            DN = .Attributes.getNamedItem("distName").Text
        End With
        
      
        
    End If
' получим IP адреса

    strNodes = "/raml/cmData/managedObject[@class='com.nokia.srbts.tnl:IPADDRESSV4']/p[@name='localIpAddr']"
    'strNodes = "/raml/cmData/managedObject[@distName='MRBTS-605775/TNLSVC-1/TNL-1/IPNO-1/IPIF-1/IPADDRESSV4-1']/p[@name='localIpAddr']"
    For Each objXmlSingleNode In objXmlDoc.selectNodes(strNodes)
        OAMIP = objXmlSingleNode.Text
        Debug.Print "OAMIP = " & OAMIP
    Next

    
ExitHere:
    Set objXmlDoc = Nothing
    Exit Sub
HandleErrors:
    Debug.Print Err.Number; vbTab; Err.description
    Resume ExitHere

End Sub



К сообщению приложен файл. Размер - 18Kb
9 фев 19, 16:56    [21805301]     Ответить | Цитировать Сообщить модератору
 Re: Снова XML парсинг, маленький вопрос  [new]
court
Member

Откуда:
Сообщений: 1771
что-то типа этого:
    strNodes = "/raml/cmData/managedObject[@class='com.nokia.srbts.tnl:IPADDRESSV4']/p[@name='localIpAddr']"
    For Each objXmlSingleNode In objXmlDoc.selectNodes(strNodes)
        OAMIP = objXmlSingleNode.Text
        Debug.Print "OAMIP = " & OAMIP
' так
        Debug.Print objXmlSingleNode.parentNode.Attributes.getNamedItem("distName").Text 
' или сразу так
        Debug.Print Split(objXmlSingleNode.parentNode.Attributes.getNamedItem("distName").Text, "/")(4)
    Next
11 фев 19, 11:14    [21806170]     Ответить | Цитировать Сообщить модератору
 Re: Снова XML парсинг, маленький вопрос  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
court спасибо.
И еще такой любопытный вопрос. Могу ли как-то обратиться к конкретному значению, минуя конструкцию For Each... Next, если я знаю, что это значение в XML единственное, чтобы сразу присвоить назначенной переменной. Например, то что закомментировано на картинке, будут переменными.

К сообщению приложен файл. Размер - 4Kb
11 фев 19, 16:52    [21806646]     Ответить | Цитировать Сообщить модератору
 Re: Снова XML парсинг, маленький вопрос  [new]
court
Member

Откуда:
Сообщений: 1771
Архимедофф
court спасибо.
И еще такой любопытный вопрос. Могу ли как-то обратиться к конкретному значению, минуя конструкцию For Each... Next, если я знаю, что это значение в XML единственное, чтобы сразу присвоить назначенной переменной. Например, то что закомментировано на картинке, будут переменными.

Картинка с другого сайта.

selectSingleNode

вроде так
oamip = objXmlDoc.selectSingleNode("/raml/cmData/managedObject[@class='IPNO']/p[@name='mPlaneIpAddress']").Text
lteip = objXmlDoc.selectSingleNode("/raml/cmData/managedObject[@class='IPNO']/p[@name='uPlaneIpAddress']").Text
11 фев 19, 17:20    [21806683]     Ответить | Цитировать Сообщить модератору
 Re: Снова XML парсинг, маленький вопрос  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
court,
Вот спасибо.
Если путь несколько длиннее, например:
strNodes =/raml/cmData/managedObject[@class='com.nokia.srbts.tnl:IPADDRESSV4']/list[@name='cPlaneList']/itemp[@name='ipV4Address']

, то вот так (objXmlSingleNode.parentNode.Attributes.getNamedItem("distName").Text ) не получилось увидеть distName :(
Фактически distName желательно знать всегда для дальнейшей обработки файла.
12 фев 19, 13:52    [21807363]     Ответить | Цитировать Сообщить модератору
 Re: Снова XML парсинг, маленький вопрос  [new]
court
Member

Откуда:
Сообщений: 1771
Архимедофф
court,
Вот спасибо.
Если путь несколько длиннее, например:
strNodes =/raml/cmData/managedObject[@class='com.nokia.srbts.tnl:IPADDRESSV4']/list[@name='cPlaneList']/itemp[@name='ipV4Address']


, то вот так (objXmlSingleNode.parentNode.Attributes.getNamedItem("distName").Text ) не получилось увидеть distName :(
Фактически distName желательно знать всегда для дальнейшей обработки файла.
Два раза parentNode тогда (если правильно понял о чём ты)

objXmlSingleNode.parentNode.parentNode.Attributes.getNamedItem("distName").Text
12 фев 19, 14:33    [21807425]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить