任何开源工具或Excelmacros从xml中提取xpath的列表?

基本上我想能够指定一个XML或2像这样(如果你可以select一个文件夹,它会抓住所有的XML文件):

Xml 1:

<Client> <LastName>Bill</LastName> <FirstName>Gates</FirstName> <MiddleName/> <Suffix/> <DateOfBirth>30-May-1968</DateOfBirth> <PlaceOfBirth/> <SSN>n/a</SSN> <Gender>Male</Gender> <District> <City>SHELTON</City> <Mayor>wong</Mayor> </District> <State>WA</State> <Zip>96484</Zip> </Client> 

Xml 2:

 <Client> <LastName>Warron</LastName> <FirstName>Buffet</FirstName> <MiddleName>P</MiddleName> <Suffix/> <DateOfBirth>12-Aug-1957</DateOfBirth> <PlaceOfBirth>Mississippi</PlaceOfBirth> <SSN>n/a</SSN> <Gender>Male</Gender> <City>Missi</City> <State>KS</State> <Account> <Type> <Name>Cash</Name> <Currency>USD</Currency> <Country>USA</Country> </Type> </Account> <Zip>66096</Zip> </Client> 

然后在excel表格(即'Xpaths')的列A中放置xpath列表,例如:

 /Client/DateOfBirth /Client/Account/Type/Name /Client/Zip /Client/District/City 

期望的行为:在一个新的excel工作表(即“结果”)的表格中接收结果,列表如下:

 /Client/DateOfBirth /Client/Account/Type/Name /Client/Zip /Client/District/City ---------------- ------------------------ ------------ -------------------- 30-May-1968 96484 SHELTON 12-Aug-1957 Cash 66096 

不会介意,如果这是使用Excel VBAmacros。

更新 – debuggingTim的答案: 在这里输入图像说明

这对我使用你的例子(与顶部添加的XML DTD)…

 Sub Tester() ProcessFiles ThisWorkbook.Path, Sheet1.Range("A1:D1") End Sub Sub ProcessFiles(FolderPath As String, XPathRange As Range) Dim oXML As MSXML2.DOMDocument Dim oNode As MSXML2.IXMLDOMNode Dim fName As String Dim c As Range Dim x As Integer Dim rv x = 1 fName = Dir(FolderPath & "\*.xml") Do While fName <> "" Set oXML = New MSXML2.DOMDocument oXML.Load FolderPath & "\" & fName For Each c In XPathRange.Cells rv = "" Set oNode = oXML.SelectSingleNode(c.Value) If Not oNode Is Nothing Then rv = oNode.nodeTypedValue End If c.Offset(x, 0).Value = rv Next c x = x + 1 fName = Dir() Loop End Sub 

您可以简单地添加一个Xml地图到您的工作簿,并将所需的元素拉到您的工作表:

  1. 用Excel打开你的Xml源文件

  2. select“使用Xml源任务窗格”选项并点击“确定”

  3. 接受该Excel将为您创build一个架构

  4. 将所需的元素从“Xml源”窗格拖到列中

  5. 右键单击任何列,然后select“Xml” – >“导入”

  6. 打开所需的Xml文件。

您可以使用此http://msdn.microsoft.com/en-us/library/ms675260(VS.85).aspx

将xml传递给列使用

  If adoRS.Fields(ndx).Type = adChapter Then 'you have a new column Set adoChildRS = adoRS.Fields(ndx).Value WalkHier iLevel, adoChildRS Else 'put value in column Debug.Print iLevel & ": adoRS.Fields(" & ndx & _ ") = " & adoRS.Fields(ndx).Name & " = " & _ adoRS.Fields(ndx).Value End If