【问题标题】:Bulk filter & parse ONIX data (XML) in Excel在 Excel 中批量过滤和解析 ONIX 数据 (XML)
【发布时间】:2017-09-03 15:47:20
【问题描述】:

我有 3000 个带有书籍元数据的 ONIX 样式的 xml URL。 我想从这些文件中过滤出一些节点,并将它们解析为单个工作表中的 Excel 行。

这是一个 XML 路径的示例: http://btsoep.appspot.com/rest/book/9789082516425

我想将这些 XML 数据过滤为

<Product>
 <Title>
  <TitleText>

<Product>
 <Contributor>
  <PersonName>

我需要在 Excel 工作表中检索到的数据,其中每个 URL 都有自己的行。所以 URL 在 A 行,TitleText 在 B 行,PersonName 在 C 行。

我该怎么做?

编辑 1:

到目前为止,我尝试过的是: -首先使用 wget 下载所有 xml 数据,然后尝试批量解析这是 excel。这可以工作,但没有必要。 - 在 Excel 中使用默认的 XMLimport 函数。我似乎无法批量运行它。

我没有任何过滤 XML 文件和在 Excel 工作表中解析它的经验。我没有要求任何人为我解决这个问题或为我编写代码,但我希望朝着好的方向迈出一步。哪种工具最适合这种情况?再次感谢。

【问题讨论】:

  • 首先在互联网上搜索vba parse xml ...。您应该在此处发布问题之前完成此操作
  • 像蛋糕一样简单...只需遍历 URL 列表并将 xpath 解析为那些节点值,并按行和列迭代地写入单元格。 OP 玩得很开心!
  • 既然我们知道您需要什么,请向我们展示您迄今为止所做的尝试。因为 (a) 这不是免费的代码编写服务 (b) 询问如何在不涉及特定代码问题的情况下实现某些东西的问题是题外话。
  • @jsotola 感谢您的回答。在过去的 3 天里,我一直在尝试各种东西,但我似乎无法进一步了解或在现有线程上找到帮助。朝着正确的方向迈出一步会很棒。
  • How to parse XML using vba 的可能重复项 有数以千计的教程如何使用 VBA 解析 XML。如果您有策略和第一个代码,请通过它们回来。然后向您的代码询问一个特定问题(您在哪里卡住/错误等)。关于如何实施某事的问题过于宽泛,无法回答,因此离题。

标签: xml vba excel onix


【解决方案1】:

这应该让你开始

Option Explicit

Sub parseONIX()

    Dim URL As String

    URL = "http://btsoep.appspot.com/rest/book/9789082516425"
 '  URL = "https://www.w3schools.com/xml/plant_catalog.xml"

    Dim XMLPage As New MSXML2.XMLHTTP60
    XMLPage.Open "GET", URL, False
    XMLPage.send

    Dim XMLDoc As New MSXML2.DOMDocument
    XMLDoc.LoadXML XMLPage.responseText

    Debug.Print XMLDoc.ChildNodes(0).BaseName
    Debug.Print XMLDoc.ChildNodes(1).BaseName
    Debug.Print XMLDoc.ChildNodes(1).ChildNodes(0).BaseName
    Debug.Print XMLDoc.ChildNodes(1).ChildNodes(1).BaseName
    Debug.Print XMLDoc.getElementsByTagName("Product").Item(0).BaseName

    Dim i As Integer

    For i = 0 To XMLDoc.getElementsByTagName("Measure").Length - 1

        Debug.Print "type: "; XMLDoc.getElementsByTagName("Measure")(i).ChildNodes(0).Text,
        Debug.Print XMLDoc.getElementsByTagName("Measure")(i).ChildNodes(1).Text,
        Debug.Print XMLDoc.getElementsByTagName("Measure")(i).ChildNodes(2).Text

    Next i



End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多