Я пытаюсь редактировать файл XML DOM с помощью Excel VBA, но сталкивается с проблемами, выходящими за пределы узлов уровня 1. Мое требование состоит в том, чтобы изменять все (и только) текстовые узлы, но написанный мной сценарий изменяет все узлы уровня 1.Редактирование всех текстовых узлов XML DOM с помощью Excel VBA
Просьба уточнить изменения кода.
Входной XML:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Body>
<Request>
<individual>
<hasName>
<firstName>ABC</firstName>
<lastName>DEF</lastName>
</hasName>
<birthDate>2015-01-10</birthDate>
<hasContact>
<type>Mobile</type>
<phoneAddress>
<countryCode>02</countryCode>
<localNumber>12345678</localNumber>
</phoneAddress>
</hasContact>
</individual>
</Request>
</Body>
</Envelope>
Excel VB Script:
Option Explicit
Sub Test()
Dim xmlDoc
Dim colNodes
Dim objNode
Dim objNodesParam
Set xmlDoc = CreateObject ("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load("H:\Desktop\Request.xml")
Set colNodes = xmlDoc.SelectNodes ("/Envelope/Body/Request/individual/*")
For Each objNode In colNodes
objNodeParam = "{{" & objNode.nodeName & "}}"
objNode.Text = objNodeParam
Next
xmlDoc.Save "H:\Desktop\Request.xml"
End Sub
Фактический выход из вышеприведенного сценария:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Body>
<Request>
<individual>
<hasName>{{hasName}}</hasName>
<birthDate>{{birthDate}}</birthDate>
<hasContact>{{hasContact}}</hasContact>
</individual>
</Request>
</Body>
</Envelope>
Ожидаемый результат:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Body>
<Request>
<individual>
<hasName>
<firstName>{{firstName}}</firstName>
<lastName>{{lastName}}</lastName>
</hasName>
<birthDate>{{birthDate}}</birthDate>
<hasContact>
<type>{{type}}</type>
<phoneAddress>
<countryCode>{{countryCode}}</countryCode>
<localNumber>{{localNumber}}</localNumber>
</phoneAddress>
</hasContact>
</individual>
</Request>
</Body>
</Envelope>
Спасибо за быстрый ответ Гомер. Просто быстрый запрос будет работать для любого типа XML (независимо от того, насколько глубоко теги идут) –