检查xml节点是否不存在并执行某些操作而不是失败

时间:2011-10-10 14:46:03

标签: xml vbscript

给出以下XML。

<?xml version="1.0" encoding="UTF-8"?>
<xmldata>
   <Products>
       <ProductCode>M406789</ProductCode>
       <ProductID>858</ProductID>
       <ProductName>M406789 Ignition Box</ProductName>
       <ProductDescriptionShort>&lt;img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" /&gt;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上看过这个东西,但似乎无法找到它。

3 个答案:

答案 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