<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.enterprise.soap.sforce.com">
<soapenv:Header>
<LimitInfoHeader>
<limitInfo>
<current>50</current>
<limit>5000000</limit>
<type>API REQUESTS</type>
</limitInfo>
</LimitInfoHeader>
</soapenv:Header>
<soapenv:Body>
<queryResponse>
<result>
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:Nodav">
<sf:Id>a0S0E000000DMUg320</sf:Id>
<sf:Name>Netta test 11</sf:Name>
</records>
<records xsi:type="sf:Nodav">
<sf:Id>a0S0E000000DMUg321</sf:Id>
<sf:Name>Netta test 32</sf:Name>
</records>
<size>2</size>
</result>
</queryResponse>
</soapenv:Body>
</soapenv:Envelope>
我的代码如下:
Dim xmlhtp As New MSXML2.XMLHTTP
Dim xmlDoc As New MSXML2.DOMDocument
Set records = xmlDoc.DocumentElement
Set lists = records.SelectNodes("//Envelope/Header/Body/queryResponse/result/records")
For Each listNode In lists.ChildNodes
Debug.Print "---Email---"
For Each fieldNode In listNode.ChildNodes
Debug.Print "[" & fieldNode.BaseName & "] = [" & fieldNode.Text & "]"
Next fieldNode
Next listNode
Set records = Nothing
现在我收到错误,我想要的是获取所有记录中的sf:id
和sf:name
,你能帮我修改我的代码吗?
度过美好的一天
答案 0 :(得分:0)
评论说你的原始Xml没有&#34;编译&#34; (格式良好)所以我编辑了那个资源,我希望这是一个很好的编辑,因为我已经编写了反对它的代码。
我有Xml命名空间的问题,因为我不知道如何获取默认命名空间,我可以跳过前缀。所以我被迫在我的解决方案中总是使用前缀,即使我必须伪造一个。伪命名空间dom.setProperty "SelectionNamespaces", "xmlns:sf='urn:sobject.enterprise.soap.sforce.com' xmlns:sf2='urn:enterprise.soap.sforce.com'
在我的行开头添加
<records/>
我希望真正的Xml命名空间专家可以更好地重写这个答案。在此期间,此代码有效。所以我将文件保存到本地驱动器。此外,可以直接钻取并直接抓取两个Debug.Assert
元素,但如果您想要一个完整路径,那么请查看注释掉的Option Explicit
Sub TestCoreLogic()
Dim dom As MSXML2.DOMDocument60
Set dom = New MSXML2.DOMDocument60
dom.Load "N:\xmlfile1.xml"
Debug.Assert dom.parseError.ErrorCode = 0
dom.setProperty "SelectionLanguage", "XPath"
dom.setProperty "SelectionNamespaces", "xmlns:sf='urn:sobject.enterprise.soap.sforce.com' xmlns:sf2='urn:enterprise.soap.sforce.com' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
CoreLogic dom
End Sub
'
Function CoreLogic(ByVal xmlDoc As MSXML2.DOMDocument60)
Dim records As MSXML2.IXMLDOMElement
Set records = xmlDoc.DocumentElement
Dim lists As MSXML2.IXMLDOMNodeList
'Debug.Assert records.SelectNodes("//soapenv:Envelope").Length = 1
'Debug.Assert records.SelectNodes("//soapenv:Envelope/soapenv:Body").Length = 1
'Debug.Assert records.SelectNodes("//soapenv:Envelope/soapenv:Body/sf2:queryResponse").Length = 1
'Debug.Assert records.SelectNodes("//soapenv:Envelope/soapenv:Body/sf2:queryResponse/sf2:result").Length = 1
'
'Debug.Assert records.SelectNodes("//soapenv:Envelope/soapenv:Body/sf2:queryResponse/sf2:result/sf2:records").Length = 2
'Set lists = records.SelectNodes("//soapenv:Envelope/soapenv:Body/sf2:queryResponse/sf2:result/sf2:records")
Debug.Assert records.SelectNodes("//sf2:records").Length = 2
Set lists = records.SelectNodes("//sf2:records")
Dim listNode As MSXML2.IXMLDOMNode
For Each listNode In lists
Debug.Print "---Email---"
Dim fieldNode As MSXML2.IXMLDOMNode
For Each fieldNode In listNode.ChildNodes
Debug.Print "[" & fieldNode.BaseName & "] = [" & fieldNode.Text & "]"
Next fieldNode
Next listNode
Set records = Nothing
Set lists = Nothing
Set listNode = Nothing
Set fieldNode = Nothing
End Function
行
players = {'player-{}'.format(num): 0 for num in range(1, num_players + 1)}