excel - 如何从 XML 类型文档中检索特定信息
问题描述
我正在使用 Excel 中的 VBA 宏来从 CNC 程序代码中收集信息。到目前为止,我已经获得了材料类型、厚度、x 和 Y 尺寸以及使用的数量。
我现在正在尝试获得“切割长度” - 所以我可以在成本计算中使用它。
这是 XML 代码段:
<Info num="6" name="Tools">
<MC machine="psys_ETN_5">
<Tool name="TN901" length="16262.96209" time="53.72817301" cutoutArea="8138.657052"/>
</MC>
</Info>
有很多“信息”行。可能有不止一个“工具”系列,但我只追求“TN901”系列中的任何东西。
我试图捕获的数据是 'Length="######.##"' 的值
我已经从这样的代码中捕获了我需要的所有其他内容:
<Material>316</Material>
<SheetX>2000</SheetX>
<SheetY>1000</SheetY>
<Thickness>3</Thickness>
</Material>
使用这样的代码:
For Each nodemat In XMLDataDrg.SelectNodes("//Material")
Matl = nodemat.Text
Worksheets("Sheet4").Range("H" & RowA).Value = Matl
Next
For Each nodesht In XMLDataDrg.SelectNodes("//Thickness")
Thk = nodesht.Text
Worksheets("Sheet4").Range("I" & RowA).Value = Thk
Next
但是那种类型的代码没有得到切割长度。
请问有什么帮助吗?:)
谢谢
西蒙
解决方案
您可以使用 xpath 限制Tool
属性name
具有值的元素,TN901
然后循环所有属性并写出。我正在从桌面上的文件中读取您的 XML。
Option Explicit
Public Sub test()
Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.validateOnParse = True
.setProperty "SelectionLanguage", "XPath"
.async = False
If Not .Load("C:\Users\User\Desktop\Test.xml") Then
Err.Raise .parseError.ErrorCode, , .parseError.reason
End If
End With
Dim elem As Object, attrib As Object
For Each elem In xmlDoc.SelectNodes("//Tool[@name='TN901']")
For Each attrib In elem.Attributes
Debug.Print attrib.nodeName, attrib.Text
Next
Next
End Sub
结果:
推荐阅读
- excel - 列表的随机化
- python - 无法下载 CoraGraphDataset
- rust - 如何将字符串视为 Rust 类型?
- magento2 - Magento 2:如果请求的数量在添加到购物车功能上不可用,则禁用重定向到产品页面
- c# - C# 使用反射将 DataMembers 传递给表达式主体
- sql - 当“CASE WHEN”在触发器中时,Django sqlite3 迁移触发器失败?
- flutter - 颤振错误:不支持的操作:Platform_operatingSystem
- python - 根据条件合并 DataFrame
- database - 其他用户如何在 pgAdmin 中访问我的 PostgreSQL 数据库?
- android - 如何在颤动中将 Uint32 转换为 Wav 而不将其转换为 Uint8 以保持质量?