使用VBA解析XML标记

时间:2013-05-22 14:00:45

标签: xml vba

我正在尝试解析具体的"字段"在下面的XML示例中使用VBA。例如,我想专门解析来自" Field1"的值。并将其扔入变量。我有各种各样的麻烦。

这里有一些示例代码:

Sub test()
Set oXML = New MSXML2.DOMDocument      
oXML.async = False
oXML.validateOnParse = False
oXML.Load ("C:\sample.xml")
Set oXmlNodes = oXML.selectNodes("/")

For Each oXmlNode In oXmlNodes
 Debug.Print oXmlNode.Text
Next

End Sub

这就是XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<form>
 <metadata>
 <prop name="formName">
 <value>myTestForm</value> 
 </prop>
 <prop name="formIdentifier">
 <value>0000033</value> 
 </prop>
 </metadata>
 <field name="field1" type="String">
 <value>something</value> 
 </field>
 <field name="field2" type="String">
 <value>something else</value> 
 </field>
</form>

1 个答案:

答案 0 :(得分:2)

您的示例XML格式不正确:您的“prop”结束标记没有匹配的开始标记:

<form>
 <metadata>

     <value>myTestForm</value> 
   </prop>
   <prop name="formIdentifier">
     <value>0000033</value> 
   </prop>
 </metadata>

尝试添加prop标签,例如:

<form>
 <metadata>
   <prop name="formName">
     <value>myTestForm</value> 
   </prop>
   <prop name="formIdentifier">
     <value>0000033</value> 
   </prop>
 </metadata>

在您的代码中,您应该检查解析错误:

oXML.Load ("C:\sample.xml")
if (oXML.parseError.errorCode != 0) ...

<强>更新

  

在我的帖子中进行了更正,但显然仍然不知道如何解析具体的值。

您正在使用选择根节点的XPATH表达式“/”。您需要更改此选项以选择所需的节点。目前还不清楚你想要什么,但你可以先尝试选择所有“场”节点。

Set oXmlNodes = oXML.selectNodes("//field")

或更具体的内容,例如以下将选择作为根表单节点的子节点并具有属性name ='field1'的字段节点:

Set oXmlNodes = oXML.selectNodes("/form/field[@name='field1']")

如果这没有帮助,请发布有关您想要的更多信息,或者查看XPATH教程。