如何在导入XML之前过滤XML /将其链接到Excel中的地图

时间:2014-05-06 06:19:45

标签: xml excel vba xpath

如何在导入XML之前过滤XML /将其链接到Excel中的地图

我想将XML过滤到一个记录,然后通过将记录链接到地图将记录导入到Excel中。 到目前为止,我只能通过以下方式实现这一目标:

  1. 使用XPath表达式过滤节点作为IXMLDOMNode
  2. 获取节点的xml字符串
  3. 使用根节点标记扩展字符串
  4. 使用.ImportXml(...)
  5. 将字符串分配给地图

    我想知道是否有更简单的方法可以做到这一点,特别是第3步(扩展字符串)似乎有点复杂。

    备注:示例xml取自" Excel 2007 VBA程序员参考"。

    非常感谢提前

    安德烈

    VBA代码:

    Sub FilterNode()
        Dim oXmlDoc As DOMDocument60
        Dim oXmlNode As IXMLDOMNode
        Dim strXml As String
        Dim oMap As XmlMap
    
        'Filter xml
        Set oXmlDoc = New DOMDocument60
        oXmlDoc.async = False
        oXmlDoc.Load (ThisWorkbook.Path & "\EmployeeSales.xml")
        Set oXmlNode = oXmlDoc.SelectSingleNode("//Employee[Empid=24601]")
        strXml = oXmlNode.XML
    
        'Extend xml String
        'is this really necessary?
        strXml = "<EmployeeSales>" & vbCrLf & strXml & vbCrLf & "</EmployeeSales>"
    
        'link xml with map
        Set oMap = ThisWorkbook.XmlMaps(2)
        oMap.ImportXml (strXml)
    End Sub
    

    示例XML:

    <?xml version="1.0"?>
    <EmployeeSales>
         <Employee>
              <Empid>2312</Empid>
              <FirstName>Mike</FirstName>
              <LastName>Alexander</LastName>
              <InvoiceNumber>100</InvoiceNumber>
              <InvoiceAmount>2300</InvoiceAmount>
         </Employee>
    
         <Employee>
              <Empid>24601</Empid>
              <FirstName>Stephen</FirstName>
              <LastName>Bullen</LastName>
              <InvoiceNumber>200</InvoiceNumber>
              <InvoiceAmount>3211</InvoiceAmount>
         </Employee>
    </EmployeeSales>
    

1 个答案:

答案 0 :(得分:0)

给出的代码示例是最好的方法。