我有一个xml文件。但是我需要编辑一些值并将其保存为新文件或相同文件。
例如:需要将“速度”值从100修改为200,然后保存。
此外,我想遍历所有“ Pathnode”子对象以达到“变量”,这是我的兴趣。 “路径节点”的数量可能会在“输入”和“变量”之间变化
<AnalysisCase Name="case 1\Load cycle"/>
<Inputs>
<PathNode Name="New Design">
<PathNode Name="Input">
<PathNode Name="## Property ##">
<PathNode Name="Component Load Case">
<Variable Name="Speed" Value="100" />
<Variable Name="Torque" Value="150"/>
</PathNode>
</PathNode>
</PathNode>
</PathNode>
</Inputs>
答案 0 :(得分:1)
您可以使用HTMLObject库读入HTMLDocument解析器,然后使用querySelector和SetAttribute
HTML.querySelector("[Name=Speed]").SetAttribute "Value", "200"
如果使用xml解析器并读入xml文档变量,则原理相同。请参阅第二个代码示例。
请注意,您的xml必须格式正确,而上述格式则不能。我将您的第一个元素视为应正确形成的根。
我认为需要第一场比赛。如果有多个匹配项,请使用
querySelectorAll
与HTMLDocument
并从i = 0循环到匹配项。长度-1
使用
xmlDoc.SelectNodes
和DOMDocument
和For Each
在比赛中的每场比赛中
HTMLDocument:
要将本地xml读入HTMLDocument变量,可以使用FileSystemObject
Public Function GetHTMLFileContent(ByVal filePath As String) As HTMLDocument
Dim fso As Object, hFile As Object, hString As String, html As HTMLDocument
Set html = New HTMLDocument
Set fso = CreateObject("Scripting.FileSystemObject")
Set hFile = fso.OpenTextFile(filePath)
Do Until hFile.AtEndOfStream
hString = hFile.ReadAll()
Loop
html.body.innerHTML = hString
Set GetHTMLFileContent = html
End Function
XML DOMDocument:
Option Explicit
Public Sub test()
Dim xmlDoc As Object, node As Object ' IXMLDOMElement ''<early bound requires reference to Microsoft XML v3 or v6 depending on your Excel version
Set xmlDoc = CreateObject("MSXML2.DOMDocument") 'New MSXML2.DOMDocument60
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
Set node = xmlDoc.SelectSingleNode("//Variable[@Name='Speed' and @Value]")
If Not node Is Nothing Then
node.setAttribute "Value", "200"
End If
End Sub
测试xml
<AnalysisCase Name="case 1\Load cycle">
<Inputs>
<PathNode Name="New Design">
<PathNode Name="Input">
<PathNode Name="## Property ##">
<PathNode Name="Component Load Case">
<Variable Name="Speed" Value="100" />
<Variable Name="Torque" Value="150" />
</PathNode>
</PathNode>
</PathNode>
</PathNode>
</Inputs>
</AnalysisCase>
参考文献:
答案 1 :(得分:0)
您要问的是如何在vba中读取和写入文本文件(因为这就是xml文件)。
我建议您阅读this article关于该主题的知识,该主题应该为您提供入门所需的所有信息。