VBS从目录中的所有xml文档提取节点
我有下面的VBS,它从一段xml中提取两个属性,我想修改代码以查找数据目录,并提取中所有xml文档的这两个属性 如果它能将每个文件的输出放在同一行上,也会很整洁 用户名-ID,而不是当前的 用户名 身份证 xml的小例子,将是不同的标记,但格式将是相同的VBS从目录中的所有xml文档提取节点,xml,vbscript,Xml,Vbscript,我有下面的VBS,它从一段xml中提取两个属性,我想修改代码以查找数据目录,并提取中所有xml文档的这两个属性 如果它能将每个文件的输出放在同一行上,也会很整洁 用户名-ID,而不是当前的 用户名 身份证 xml的小例子,将是不同的标记,但格式将是相同的 <Batch> <User> <Username>Ignatius</Username> <Department>IT</Department> <ID
<Batch>
<User>
<Username>Ignatius</Username>
<Department>IT</Department>
<ID>123456</ID>
</User>
</Batch>
伊格纳修斯
信息技术
123456
我怎样才能从下面的XML中提取出这个城镇?在同一排?并将其放入文本文件中
<Batch>
<User>
<Detail>
<Username>Ignatius</Username>
<Department>IT</Department>
<ID>123456</ID>
</Detail>
<Location>
<Town>London</Town>
</Location>
</User>
</Batch>
伊格纳修斯
信息技术
123456
伦敦
关键概念:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim objXML : Set objXML = CreateObject("MSXML2.DOMDocument")
objXML.async = false
Dim oFile
For Each oFile In oFS.GetFolder("..\data").Files
WScript.Echo oFile.Path
If 1 = InStr(oFile.Name, "24607266") Then
objXML.load oFile.Path
If objXML.parseError Then ' never without my check
WScript.Echo objXML.parseError.reason
Else
Dim sXPath : sXPath = "/Batch/User"
Dim ndlUsers : Set ndlUsers = objXML.selectNodes(sXPath)
If 0 = ndlUsers.length Then ' never without my check
WScript.Echo "fail:", sXPath
Else
Dim ndUser
For Each ndUser In ndlUsers
' no attribs!
' WScript.Echo ndUser.getAttribute("Name"), ndUser.getAttribute("Id")
WScript.Echo ndUser.selectSingleNode("Username").text, ndUser.selectSingleNode("ID").text
Next
End If
End If
End If
Next
(开始您的研究。)请发布您的.XML的(少量)样本。那么,您为什么要求进行属性检索?Hi@Ekkehard.Horner请参见上面的XML示例。目录中有许多相同格式的文件(目前还不知道一天有多少个)需要将所有文件中的数据提取到文本文档中。从上面的例子来看,一行是:伊格纳修斯_123456@user3811820-如果你的“新”问题与已解决的问题如此不同,以至于你无法按照刚刚学到的原则解决它,那么它就应该有自己的问题。
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim objXML : Set objXML = CreateObject("MSXML2.DOMDocument")
objXML.async = false
Dim oFile
For Each oFile In oFS.GetFolder("..\data").Files
WScript.Echo oFile.Path
If 1 = InStr(oFile.Name, "24607266") Then
objXML.load oFile.Path
If objXML.parseError Then ' never without my check
WScript.Echo objXML.parseError.reason
Else
Dim sXPath : sXPath = "/Batch/User"
Dim ndlUsers : Set ndlUsers = objXML.selectNodes(sXPath)
If 0 = ndlUsers.length Then ' never without my check
WScript.Echo "fail:", sXPath
Else
Dim ndUser
For Each ndUser In ndlUsers
' no attribs!
' WScript.Echo ndUser.getAttribute("Name"), ndUser.getAttribute("Id")
WScript.Echo ndUser.selectSingleNode("Username").text, ndUser.selectSingleNode("ID").text
Next
End If
End If
End If
Next