Member 11403304 Ответов: 1

Как исправить мой оператор if для проверки 3 элементов?


У меня есть оператор if ниже, который не работает так, как я ожидаю. Xml - документ в objXMLInputDoc имеет 3 необязательных элемента, AddPersonContactInformation, PersonTelephoneNumber и PersonEmailAddress
То, что я пытаюсь сделать, - это проверить, существует ли какой-либо из этих 3 элементов, и продолжить. Если все они отсутствуют, оператор if завершится с ошибкой.
Он работает, когда все элементы отсутствуют. Однако, когда присутствует один элемент, оператор if все еще существует как. Как исправить оператор if так, чтобы при наличии одного элемента он не выходил с ошибкой?

Этот пример xml-документа присваивается объекту objXMLInputDoc. Вот как оператор if обращается к нему и его элементам.
Пример xml-документа
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope>
	<soap:Body>
		<AddPersonContactInformation>
			<PersonAddress>
				<AddressUSStandard>
					<AddressAttention>Mr Smith</AddressAttention>
				</AddressUSStandard>
			</PersonAddress>
			<!--<PersonTelephoneNumber telephoneNumberUsageText="Home">
				<Telephone>698-478-4612</Telephone>
			</PersonTelephoneNumber>-->
			<!--<PersonEmailAddress>Testing@gmail.com</PersonEmailAddress>-->
		</AddPersonContactInformation>
	</soap:Body>
</soap:Envelope>


Если оператор не работает
If ((objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonAddress") Is Nothing) And (objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonTelephoneNumber") Is Nothing) And (objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonEmailAddress") Is Nothing)) Then
'exit 
 Exit Sub
End If


Что я уже пробовал:

If ((objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonAddress") Is Nothing) And (objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonTelephoneNumber") Is Nothing) And (objXMLInputDoc.DocumentElement.SelectSingleNode("AddPersonContactInformation/PersonEmailAddress") Is Nothing)) Then
'exit 
 Exit Sub
End If

Maciej Los

- Вы уверены? Кажется, что PersonAddress существует. Таким образом, он не может быть нулевым (ничего)!

1 Ответов

Рейтинг:
6

Richard Deeming

SelectSingleNode ожидает выражение XPath, которое начинается с текущего узла.

С AddPersonContactInformation не является прямым дочерним элементом корневого элемента, ваше выражение XPath не будет соответствовать ничему.

Для начала измените выражение лица "//"чтобы соответствовать элементу в любом месте документа:

If ((objXMLInputDoc.DocumentElement.SelectSingleNode("//AddPersonContactInformation/PersonAddress") Is Nothing) AndAlso (objXMLInputDoc.DocumentElement.SelectSingleNode("//AddPersonContactInformation/PersonTelephoneNumber") Is Nothing) AndAlso (objXMLInputDoc.DocumentElement.SelectSingleNode("//AddPersonContactInformation/PersonEmailAddress") Is Nothing)) Then
'exit 
 Exit Sub
End If

Учебник XPath[^]
синтаксис XPath[^]

(NB: Ваш XML - файл кажется недействительным-вы пропускаете soap объявление пространства имен.)