Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBS从目录中的所有xml文档提取节点_Xml_Vbscript - Fatal编程技术网

VBS从目录中的所有xml文档提取节点

VBS从目录中的所有xml文档提取节点,xml,vbscript,Xml,Vbscript,我有下面的VBS,它从一段xml中提取两个属性,我想修改代码以查找数据目录,并提取中所有xml文档的这两个属性 如果它能将每个文件的输出放在同一行上,也会很整洁 用户名-ID,而不是当前的 用户名 身份证 xml的小例子,将是不同的标记,但格式将是相同的 <Batch> <User> <Username>Ignatius</Username> <Department>IT</Department> <ID

我有下面的VBS,它从一段xml中提取两个属性,我想修改代码以查找数据目录,并提取中所有xml文档的这两个属性

如果它能将每个文件的输出放在同一行上,也会很整洁

用户名-ID,而不是当前的

用户名

身份证

xml的小例子,将是不同的标记,但格式将是相同的

<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
伦敦
关键概念:

  • 循环遍历文件夹的.Files
  • 筛选特定文件
  • 。选择nodes可获得所需节点的列表
  • .为单个节点选择SingleNode(惊喜!)
  • 在这里使用:

      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