Как создать атрибут с определенным значением, если он не существует - VBA - PullRequest
0 голосов
/ 06 ноября 2018

Извините за мой плохой английский, но я постараюсь описать мою проблему правильно. У меня есть код в VBA. Вот оно:

Sub TestXML()
Dim doc As New DOMDocument
    Const filePath As String = "D:\Test3.xml"
    Dim isLoaded As Boolean

    isLoaded = doc.Load(filePath)

    If isLoaded Then
        Dim oAttributes As MSXML2.IXMLDOMNodeList
        Set oAttributes = doc.getElementsByTagName("Operation")

        Dim attr As MSXML2.IXMLDOMAttribute
        Dim node As MSXML2.IXMLDOMElement
        Dim tdate As String
        tdate = Format(Now(), "yyyy-mm-dd")
        For Each node In oAttributes
            For Each attr In node.Attributes
                If attr.Name = "Client" Then
                 If attr.Value <> "UL" Then
                    attr.Value = "UL"
                    End If
                ElseIf attr.Name = "Date" Then
                    If attr.Value <> "tdate" Then
                    attr.Value = tdate
                End If
                End If
            Next attr
        Next node

        doc.Save filePath

    End If
End Sub

Вопрос в том, как создать атрибут «Клиент» со значением «UL» в элементе «Операция», только если он не существует? Вот пример файла .xml, с которым я работаю:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Document>
    <Operations>
        <Operation Date="2018-11-06" Client="UL"/>
        <Operation Date="2018-11-06" Client="UL"/>
        <Operation Date="2018-11-06"/>
    </Operations>
</Document>

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Попробуйте прочитать узел атрибута, если он не существует, создайте его:

For Each node In oAttributes

    If (node.getAttributeNode("Client") Is Nothing) Then
        '// add missing attrib
        node.setAttribute "Client", "UL"
    End If

Ваш текущий код, кажется, хочет, чтобы все элементы имели Client = UL, для этого просто:

For Each node In oAttributes
    node.setAttribute "Client", "UL"
Next node

Который будет перезаписывать или создавать атрибут по мере необходимости.

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