проверьте, не существует ли xml-узел, и сделайте что-нибудь вместо сбоя - PullRequest
4 голосов
/ 10 октября 2011

Учитывая следующий 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-файл отсутствует и его узлов (скажем, «SalePrice») сценарий завершится ошибкой. Как я могу проверить, существует ли узел, чтобы он не вышел из строя. Я видел что-то об этом на стеке в прошлом, но не могу найти это.

Ответы [ 3 ]

9 голосов
/ 10 октября 2011

После настройки получения узла из 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 голос
/ 10 октября 2011

Вы можете просто выполнять проверку 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
0 голосов
/ 20 сентября 2016

Возьмите элемент в виде списка:

Dim xmlNodeList As MSXML2.IXMLDOMNodeList

Set xmlNodeList = xNewDoc.selectNodes("//ProductPrice")

Теперь спросите длину списка.Если ноль не было ни одного.

debug.print xmlNodeList.length
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...