我正在尝试使用我的excel电子表格构建验证器。 该程序从odata服务中获取数据并解析xml。
我的问题是Debug.Print doc.SelectNodes("d:userId").Item(0).XML
似乎什么也没有回复。
我的xml看起来像这样:
<entry>
<content type="application/xml">
<m:properties>
<d:userId>user.id</d:userId>
<d:lastName>name</d:lastName>
<d:username>user.name</d:username>
<d:custom01 m:null="true"></d:custom01>
<d:division>N/A</d:division>
<d:email>user.name@email.com</d:email>
<d:department>N/A</d:department>
<d:empId m:null="true">user.id</d:empId>
<d:hireDate m:null="true"></d:hireDate>
<d:jobCode m:null="true"></d:jobCode>
<d:firstName>user</d:firstName>
<d:mi m:null="true">N/A</d:mi>
</m:properties>
</content>
</entry>
这是VBA代码:
Function getSimpleProperty(propertyName As String, parentNode As IXMLDOMNode) As String
Debug.Print parentNode.SelectSingleNode(".//content")
getSimpleProperty = parentNode.SelectSingleNode("/entry/content/m:properties/" + propertyName)
End Function
我收到一条错误,上面写着“引用未声明的命名空间前缀:'d'”
我见过其他使用XmlDocument
对象的示例,但我使用MSXML2.DOMDocument60
我见过的示例使用命名空间管理器但是要创建一个我需要使用XmlDocument
中MSXML2.DOMDocument60
中不可用的方法。
Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(doc.NameTable) //doc.NameTable is used in XmlDocument but not DOMDocument60
如何创建仅包含MSXML2.DOMDocument60
的命名空间管理器
对象,因为我的程序已经与此高度集成,我不想重写整个事情。
编辑
所以我取得了一些进展。
我在加载xml之前添加了这个:
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.setProperty "SelectionNamespaces", "xmlns:d='http://schemas.microsoft.com/ado/2007/08/dataservices' xmlns:m='http://schemas.microsoft.com/ado/2007/08/dataservices/metadata'"
这适用于:
Set findRecord = doc.SelectSingleNode("//d:userId[text()='" + userId + "']").parentNode.parentNode.parentNode
当我尝试
时,这不起作用Debug.Print parentNode.SelectSingleNode("content/m:properties/")