给出以下XML。
<?xml version="1.0" encoding="UTF-8"?>
<xmldata>
<Products>
<ProductCode>M406789</ProductCode>
<ProductID>858</ProductID>
<ProductName>M406789 Ignition Box</ProductName>
<ProductDescriptionShort><img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" />Ignition Box</ProductDescriptionShort>
<ListPrice>134.2200</ListPrice>
<ProductPrice>80.5300</ProductPrice>
<SalePrice>59.9500</SalePrice>
</Products>
</xmldata>
这是脚本的相关部分。
Set xNewDoc = xData.responseXML 'ResponseXml returns DOMDocument object
Set ProductCode = xNewDoc.SelectSingleNode("//ProductCode")
Set ListPrice = xNewDoc.SelectSingleNode("//ListPrice")
x=Len(ListPrice.Text)
newlp = Left(ListPrice.Text,x-2)
Set ProductPrice = xNewDoc.SelectSingleNode("//ProductPrice")
x=Len(ProductPrice.Text)
newpp = Left(ProductPrice.Text,x-2)
Set SalePrice = xNewDoc.SelectSingleNode("//SalePrice")
x=Len(SalePrice.Text)
newsp = Left(SalePrice.Text,x-2)
Set ProductName = xNewDoc.SelectSingleNode("//ProductName")
如果缺少上面加载的xml和节点(假设&#34; SalePrice&#34;),脚本将失败。如何测试节点是否存在以便它不会失败。我过去在Stack上看过这个东西,但似乎无法找到它。
答案 0 :(得分:9)
设置从XML获取节点后,对其余部分应用Is Nothing
检查:
newpp = 0 'Initialize with a default value
Set ProductPrice = xNewDoc.SelectSingleNode("//ProductPrice")
If Not ProductPrice Is Nothing Then
x=Len(ProductPrice.Text)
newpp = Left(ProductPrice.Text,x-2)
End If
答案 1 :(得分:1)
每次使用变量时都可以进行If Not ... Is Nothing
检查,如下所示:
Set ListPrice = xNewDoc.SelectSingleNode("//ListPrice")
If Not ListPrice Is Nothing Then
x=Len(ListPrice.Text)
newlp = Left(ListPrice.Text,x-2)
End If
Set ProductPrice = xNewDoc.SelectSingleNode("//ProductPrice")
If Not ProductPrice Is Nothing Then
x=Len(ProductPrice.Text)
newpp = Left(ProductPrice.Text,x-2)
End If
答案 2 :(得分:0)
将元素作为列表:
Dim xmlNodeList As MSXML2.IXMLDOMNodeList
Set xmlNodeList = xNewDoc.selectNodes("//ProductPrice")
现在询问列表的长度。如果为零则没有。
debug.print xmlNodeList.length