VBA通过属性名称选择XML元素val

用户名

我一直在搜索SO(以及Internet的其余部分)来寻找答案,但是我似乎找不到用于基于属性选择XML节点的解决方案。
这是我的XML,下面是用于productcategoryid从REST服务XML放置的XML

  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
    <lst name="params">
      <str name="q">*:*</str>
      <str name="indent">true</str>
      <str name="wt">xml</str>
    </lst>
  </lst>

  <result name="response" numFound="5429" start="0">
    <doc>
      <int name="idProductCategory">2</int>
      <str name="categoryname">Live Animals</str>
      <int name="categoryLevel">2</int>
      <str name="bestOfferEnabled">false</str>
      <str name="leafCategory">true</str>
      <int name="parentCategoryId">1</int>
      <long name="_version_">1535190804282212352</long>
    </doc>
  </result>

</response>

我需要的元素idProductCategory,即2,通过VBA代码,但我无法从下面的代码做到这一点。

 Sub getProductCategory(prodCatName As String)
    Dim result1 As String
    Dim result As String
    Dim myURL As String
    Dim winHttpReq As Object

    Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    myURL = "http://localhost:8080/solr/category/select?q=" & prodCatName & "&wt=json"

    MsgBox myURL

    winHttpReq.Open "GET", myURL, False
    winHttpReq.Send

    MsgBox winHttpReq.responseText

    Dim doc_XML As DOMDocument60
    Set doc_XML = New DOMDocument60
    result = winHttpReq.responseText
    doc_XML.Load result

    Set List = doc_XML.documentElement.childNodes
    For Each sub_list In List
        If sub_list.Attributes(0).Text = "response" Then
            For Each Node In sub_list.childNodes(0).childNodes
                If Node.Attributes(0).Text = "idProductCategory" Then
                    result1 = Node.nodeTypedValue
                End If
            Next Node
        End If
    Next sub_list

End Sub

因此,请帮助我,我为此感到挣扎,我需要通过属性名称从上述XML中获取元素值,并将其放置在Excel中的特定单元格中。

这段代码有效,比您尝试使用的查询不太优雅,但是IMO更易于理解,因为使用xml可能会有些混乱。

Sub prueba2()
Dim doc_XML As DOMDocument60

Set doc_XML = New DOMDocument60

data = winHttpReq.responseText
doc_XML.Load data

Set List = doc_XML.DocumentElement.ChildNodes
For Each sub_list In List
    If sub_list.Attributes(0).Text = "response" Then
        For Each Node In sub_list.ChildNodes(0).ChildNodes
            If Node.Attributes(0).Text = "idProductCategory" Then
                result = Node.nodeTypedValue
            End If
        Next Node
    End If
Next sub_list
End Sub

使用的xml示例为:

<response>
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
  <lst name="params">
    <str name="q">*:*</str>
    <str name="indent">true</str>
    <str name="wt">xml</str>
  </lst>
</lst>
<result name="response" numFound="5429" start="0">
  <doc>
    <int name="idProductCategory">2</int>
    <str name="categoryname">Live Animals</str>
    <int name="categoryLevel">2</int>
    <str name="bestOfferEnabled">false</str>
    <str name="leafCategory">true</str>
    <int name="parentCategoryId">1</int>
    <long name="_version_">1535190804282212352</long>
  </doc>
</result>
</response>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过PHP(domx)中包含冒号的属性名称选择xml元素?

来自分类Dev

如何通过部分属性名称选择元素

来自分类Dev

如何通过CSS的xlink:href属性选择XML元素?

来自分类Dev

如何通过CSS的xlink:href属性选择XML元素?

来自分类Dev

通过名称选择元素的值

来自分类Dev

从xml元素中选择属性

来自分类Dev

通过属性值选择XML元素并添加一个元素

来自分类Dev

当名称中带有冒号时,通过其属性选择元素

来自分类Dev

jQuery:通过名称选择器设置第n个元素的属性

来自分类Dev

XSD通过名称或备用属性定义元素

来自分类Dev

通过标签名称获取xml元素

来自分类Dev

通过文本和属性选择元素

来自分类Dev

通过ID和CSS属性选择元素

来自分类Dev

通过文本和属性选择元素

来自分类Dev

通过指定属性名称解析 xml

来自分类Dev

通过VBA继承父属性的子元素

来自分类Dev

通过其元素内容选择xml节点

来自分类Dev

通过元素名称获取字符向量的名称属性

来自分类Dev

使用属性值选择xml元素

来自分类Dev

使用属性值选择xml元素

来自分类Dev

C#从XML选择属性或元素

来自分类Dev

他们如何使用angular / jqLite find()方法通过属性名称和值选择元素?ng-conf 2015

来自分类Dev

使用xsl通过属性显示xml元素

来自分类Dev

PHP:通过属性获取XML元素的值

来自分类Dev

通过特定属性值循环XML元素

来自分类Dev

设置名称与XML名称产生不匹配的DOM元素的属性

来自分类Dev

获取具有“名称”属性的XML元素的标签名称

来自分类Dev

按属性名称与标记名称解组XML元素

来自分类Dev

通过数据属性选择通过Ajax加载的元素