如何使用vba解析XML
我在 VBA 中工作,想要解析一个字符串,例如
<PointN xsi:type='typens:PointN'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<X>24.365</X>
<Y>78.63</Y>
</PointN>
并获取 X & Y 值转换为两个单独的整数变量。
对于 XML,我是个新手,因为我所从事的领域,我一直停留在 VB6 和 VBA 上。
我该如何做到这一点?
I work in VBA, and want to parse a string eg
<PointN xsi:type='typens:PointN'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<X>24.365</X>
<Y>78.63</Y>
</PointN>
and get the X & Y values into two separate integer variables.
I'm a newbie when it comes to XML, since I'm stuck in VB6 and VBA, because of the field I work in.
How do I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
更新
下面介绍的过程给出了使用 XML DOM 对象通过 VBA 解析 XML 的示例。 代码基于XML DOM 初学者指南。
原始回复
我知道这是一篇非常古老的帖子,但我想分享我对这个复杂问题的简单解决方案。 我主要使用基本字符串函数来访问 xml 数据。
这假设您有一些已在 VBA 函数中返回的 xml 数据(在临时变量中)。 有趣的是,人们还可以看到我如何链接到 xml Web 服务来检索该值。 图中显示的函数还采用查找值,因为可以使用 = FunctionName(value1, value2) 从单元格内访问此 Excel VBA 函数,以通过 Web 服务将值返回到电子表格中。
Update
The procedure presented below gives an example of parsing XML with VBA using the XML DOM objects. Code is based on a beginners guide of the XML DOM.
Original Response
I know this is a very old post but I wanted to share my simple solution to this complicated question. Primarily I've used basic string functions to access the xml data.
This assumes you have some xml data (in the temp variable) that has been returned within a VBA function. Interestingly enough one can also see how I am linking to an xml web service to retrieve the value. The function shown in the image also takes a lookup value because this Excel VBA function can be accessed from within a cell using = FunctionName(value1, value2) to return values via the web service into a spreadsheet.
下面是一个简短的子程序,用于解析包含钢结构形状数据的 MicroStation Triforma XML 文件。
从这里,您可以使用这些值在 MicroStation 2d 中绘制形状,或在 3d 中绘制形状并将其挤出为实体。
Here is a short sub to parse a MicroStation Triforma XML file that contains data for structural steel shapes.
From here you can use the values to draw the shape in MicroStation 2d or do it in 3d and extrude it to a solid.
当您不想启用宏时,通常不使用 VBA 更容易进行解析。 这可以通过替换功能来完成。 在单元格 B1 和 C1 中输入起始节点和结束节点。
结果行 E1 将包含您解析的值:
Often it is easier to parse without VBA, when you don't want to enable macros. This can be done with the replace function. Enter your start and end nodes into cells B1 and C1.
And the result line E1 will have your parsed value:
感谢您的指点。
我不知道这是否是解决问题的最佳方法,但这是我如何让它发挥作用的。
我在 VBA 中引用了 Microsoft XML v2.6 dll,然后以下代码片段为我提供了所需的值
Thanks for the pointers.
I don't know, whether this is the best approach to the problem or not, but here is how I got it to work.
I referenced the Microsoft XML, v2.6 dll in my VBA, and then the following code snippet, gives me the required values
这是一个有点复杂的问题,但似乎最直接的途径是通过 MSXML2.DOMDocument 加载 XML 文档或 XML 字符串,然后您可以访问 XML 节点。
您可以在以下站点找到有关 MSXML2.DOMDocument 的更多信息:
This is a bit of a complicated question, but it seems like the most direct route would be to load the XML document or XML string via MSXML2.DOMDocument which will then allow you to access the XML nodes.
You can find more on MSXML2.DOMDocument at the following sites:
添加引用 Project->References Microsoft XML, 6.0,您可以使用示例代码:
小心 xml 节点 //Root/Person 与 //root/person 不同,selectSingleNode("Name").text 也不同与 selectSingleNode("name").text
Add reference Project->References Microsoft XML, 6.0 and you can use example code:
be careful with xml node //Root/Person is not same with //root/person, also selectSingleNode("Name").text is not same with selectSingleNode("name").text
您可以使用 XPath 查询:
You can use a XPath Query:
这是一个使用 FeedDemon opml 文件的 OPML 解析器示例:
这个需要多级文件夹树(Awasu、NewzCrawler):
或者更好:
但我不明白,为什么每次都应该加载 xmldoc4。
This is an example OPML parser working with FeedDemon opml files:
This one takes multilevel trees of folders (Awasu, NewzCrawler):
or better:
but I don't understand, why xmldoc4 should be loaded each time.