如何使用VBA从xml文件的CDATA部分中提取特定信息?

问题描述:

我的问题与here描述的相似。但它不适用于Excel-VBA。如何使用VBA从xml文件的CDATA部分中提取特定信息?

你会发现文本属性实际上解决了<![CDATA[]]>的CDATA转义字符。所以实际上代码很简单。这是一个例子。

Sub Test() 

    Dim sXml As String 
    sXml = "<Root><SomeData>foo</SomeData>" & _ 
     "<SomeCDATA><![CDATA[<img src=""http://l.yimg.com/a/i/us/we/52/26.gif""/>]]>" & _ 
     "</SomeCDATA></Root>" 
    'Tools->References->Microsoft Xml v.60 
    Dim dom As MSXML2.DOMDocument60 
    Set dom = New MSXML2.DOMDocument60 
    dom.LoadXML sXml 
    Debug.Assert dom.parseError = 0 

    Dim xmlSomeCData As MSXML2.IXMLDOMElement 
    Set xmlSomeCData = dom.SelectSingleNode("Root/SomeCDATA") 

    Debug.Print xmlSomeCData.Text 

    '* or your suggestion :) 
    Dim xmlSomeCDataSection As MSXML2.IXMLDOMCDATASection 
    Set xmlSomeCDataSection = dom.SelectSingleNode("Root/SomeCDATA/text()") 

    Debug.Print xmlSomeCDataSection.Text 

End Sub 

上面的代码输出<img src="http://l.yimg.com/a/i/us/we/52/26.gif"/>

+0

是什么'''Tools->引用 - >的Microsoft XML v.60''吗? – Aqqqq

+0

这只是一个评论,说你需要添加一个工具参考到Mirosoft Xml库。否则代码将无法编译。因此,在IDE中,转到顶部菜单栏,然后​​从子菜单中选取工具,然后从弹出的对话框中向下滚动,直到找到Microsoft Xml v6.0,然后选中它旁边的复选框。 –

+0

我有一个编译错误:用户定义的类型没有定义。 (在添加注释之后)。 – Aqqqq