0

我正在尝试使用 VBA 解析下面 XML 示例中的特定“字段”。例如,我想专门解析“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>
4

1 回答 1

2

您的示例 XML 格式不正确:您有一个“prop”结束标签,但没有匹配的开始标签:

<form>
 <metadata>

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

尝试添加一个道具标签,例如:

<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 教程。

于 2013-05-22T14:21:28.327 回答