【发布时间】:2021-02-12 18:19:52
【问题描述】:
我正在尝试将特定数据从 XML 文件导入 Excel 工作表。
我使用的代码是这样的。
Dim oXMLFile As New DOMDocument60
Dim books As IXMLDOMNodeList
Dim results() As String
Dim i As Integer, booksUBound As Integer
Dim book As IXMLDOMNode, title As IXMLDOMNode, author As IXMLDOMNode
oXMLFile.Load "C:\example.xml"
Set books = oXMLFile.SelectNodes("/OUT_MESSAGE/LINES/OUT_MESSAGE_LINE")
booksUBound = books.Length - 1
ReDim results(booksUBound, 1)
For i = 0 To booksUBound
Set book = books(i)
Set title = book.SelectSingleNode("C00")
If Not title Is Nothing Then results(i, 0) = title.Text
Next
Dim wks As Worksheet
Set wks = ActiveSheet
wks.Range(wks.Cells(1, 1), wks.Cells(books.Length, 2)) = results
这适用于这个 XML
<?xml version="1.0" encoding="UTF-8"?>
<OUT_MESSAGE>
<LINES>
<OUT_MESSAGE_LINE>
<C00>1231231</C00>
<C01>3213213</C01>
</OUT_MESSAGE_LINE>
<OUT_MESSAGE_LINE>
<C00>1231234</C00>
<C01>3213214</C01>
</OUT_MESSAGE_LINE>
</LINES>
</OUT_MESSAGE>
我的问题是我的 XML 文件看起来像这样。
<?xml version="1.0" encoding="UTF-8"?>
<OUT_MESSAGE xmlns="urn:randomaddress-com:schema:test_out_message" xmlns:xsi="http://www.randomurl.com/123">
<LINES>
<OUT_MESSAGE_LINE>
<C00>1231231</C00>
<C01>3213213</C01>
</OUT_MESSAGE_LINE>
<OUT_MESSAGE_LINE>
<C00>1231234</C00>
<C01>3213214</C01>
</OUT_MESSAGE_LINE>
</LINES>
</OUT_MESSAGE>
我原本以为我可以通过替换来开始工作
Set books = oXMLFile.SelectNodes("/OUT_MESSAGE/LINES/OUT_MESSAGE_LINE")
有
Set books = oXMLFile.SelectNodes("/OUT_MESSAGE xmlns='urn:randomaddress-com:schema:test_out_message' xmlns:xsi='http://www.randomurl.com/123'/LINES/OUT_MESSAGE_LINE")
但这会给我一个运行时错误。
如果有人知道我必须对原始代码进行哪些更改,将不胜感激。
【问题讨论】:
-
做什么工作?你想做什么?从标签中获取文本?
-
您需要显示更多实际的 XML - 我们无法从单个开始标记告诉您任何内容。但是,看起来您正在处理“命名空间”,因此您需要让
oXMLFile知道这些 - 它不会自动发生。例如见stackoverflow.com/questions/64901392/… -
@TimWilliams 我添加了我的 XML 与另一个的比较。其他帖子看起来可以,我正在尝试。
-
如果您可以发布您的实际 XML 示例,这将更加有用 - 如果您不熟悉 XML,那么我们无法确信您的“书”示例反映了您的真实情况结构体。如果内容是机密的,那么只需对其进行混淆,但保留结构。此外,如果您可以发布您尝试过的代码,而不是上一篇文章中的代码,那也会有所帮助。
-
@TimWilliams,我更新了我的示例 XML 并对我所做的代码进行了更改,它基本上只是 SelectNodes 部分和要查找的标签名称