xml - 无法选择元素节点,但只能选择属性 .VBA -XML
问题描述
我有来自 IPC1752 模式的 XML,我必须根据我的 excel 数据表填充值。所以我必须做这些事情
1.将 XML 加载到我的 VBA 2.将 XML 中的所需值更改为我存储在 excel 单元格中的值 3.将修改后的 XML 保存到文件夹
'Sub UpdateXML() 调用 fnUpdateXMLByTags End Sub
函数 fnUpdateXMLByTags() 将 mainWorkBook 调暗为工作簿 将 wrsht 调暗为工作表
Set mainWorkBook = ActiveWorkbook
Set wrsht = mainWorkBook.Sheets("Sheet1")
wrsht.Activate
Dim oXMLFile As MSXML2.DOMDocument60
Set oXMLFile = New MSXML2.DOMDocument60
oXMLFile.async = False
oXMLFile.validateOnParse = False
XMLFileName = "Z:\IPC\IPC1752A_WK-200264-000 - Copy.xml"
For i = 3 To 5
If Not IsEmpty(mainWorkBook.Sheets("Sheet1").Range("A" & i)) Then
PartID = mainWorkBook.Sheets("Sheet1").Range("A" & i).Value
PartName = mainWorkBook.Sheets("Sheet1").Range("B" & i).Value
MaterialName = mainWorkBook.Sheets("Sheet1").Range("D" & i).Value
MassAmount = mainWorkBook.Sheets("Sheet1").Range("F" & i).Value
MassUnit = mainWorkBook.Sheets("Sheet1").Range("G" & i).Value
Path = "D:\New folder\" & PartID & ".xml"
If oXMLFile.Load(XMLFileName) Then
Set PartIDNodes = oXMLFile.SelectNodes("//@itemNumber")
Set PartNameNodes = oXMLFile.SelectNodes("//@itemName")
Set MaterialNameNodes = oXMLFile.SelectNodes("//@name")
Set MassAmountNodes = oXMLFile.SelectNodes("//@value")
Set MassUnitNodes = oXMLFile.SelectNodes("//@UOM")
PartIDNodes(0).NodeValue = Part_ID
PartNameNodes(0).NodeValue = PartName
MaterialNameNodes(5).NodeValue = MaterialName
MassAmountNodes(1).NodeValue = MassAmount
MassUnitNodes(1).NodeValue = MassUnit
Set ParentNodes = oXMLFile.SelectNodes("//Substance")
MsgBox ParentNodes.Length '->is showing zero
End If
End If
Next i
End Function
在这里,当我使用 selectnodes(attributes) 时,它的工作 [example:oXMLFile.SelectNodes("//@itemName")]
但是当我使用 selectnodes(elements) [example:oXMLFile.SelectNodes("//Substance")] 时不起作用
请帮忙。
解决方案
我通过使用命名空间管理器解决了它。感谢@Qharr 在这里
...部分代码...
XmlNamespaces = "xmlns:d='http://webstds.ipc.org/175x/2.0'"
oXMLFile.SetProperty "SelectionNamespaces", XmlNamespaces
If IsEmpty(mainWorkBook.Sheets("Sheet1").Range("D" & i)) Then
Substancename = mainWorkBook.Sheets("Sheet1").Range("H" & i).Value
CASNumber = mainWorkBook.Sheets("Sheet1").Range("I" & i).Value
SubAmount = mainWorkBook.Sheets("Sheet1").Range("J" & i).Value
Set SubstanceCategoryNode = oXMLFile.SelectNodes("//d:SubstanceCategory")
设置 Substancenode = oXMLFile.createElement("d:Substance")
推荐阅读
- javascript - for..in 循环用于 Javascript 中的异步任务
- rust - 如何放松对已知变体的嵌套匹配的非详尽模式检查?
- nginx - 将 Google Kubernetes Ingress 重定向到 HTTPS
- traefik - traefik 中的 WSS 到 WS 失败并出现 phantombot 图像
- php - 如何检查 url 是否是带有 php 和 mod_rewrite 参数的主页
- excel - 需要更改多个工作表中所有数据透视表的数据源
- spring - @Scheduled 特定时间间隔的注解
- haskell - 在多层 monad 中操作一个值
- django - 在 Django 中处理发布请求时出错并得到“关闭时间过长并被杀死”
- python - 根据对内容施加的条件选择列