Способ проверить, существует ли элемент, — просто получить к нему доступ, а затем проверить, является ли он Nothing
, например:
If doc.Element("product").Element("Name") IsNot Nothing Then
' ...
End If
Обратите внимание, что я использовал doc.Element("product")
, а не doc.Root.Element("product")
, поскольку в вашем примере XML product
является корневым элементом. Однако такое использование свойства Element
опасно, поскольку оно вызовет исключение, если родительский элемент не существует. Другими словами, если doc.Element("product")
возвращает Nothing
, вы не можете развернуться и получить доступ к Nothing.Element("Name")
. Итак, чтобы исправить это, вам нужно сделать что-то вроде этого:
If (doc.Element("product") IsNot Nothing) AndAlso (doc.Element("product").Element("Name") IsNot Nothing) Then
' ...
End If
Но это становится уродливым довольно быстро. Более простой способ — использовать синтаксис .<>
для доступа к элементам, например:
If doc.<product>.<Name>.FirstOrDefault IsNot Nothing Then
' ...
End If
Это вернет Nothing
, если product
или Name
не существует. Он не выдаст исключение, если один или оба из них будут отсутствовать. Если вы хотите, чтобы он выдавал исключение, вы все равно можете использовать синтаксис .<>
, но просто вызывать First
, а не FirstOrDefault
.
Конечно, я мог бы указать, что все это было бы немного проще, чище и гибче, если бы вы использовали XPath (отраслевой стандарт), а не собственную технологию Microsoft LINQ-to-XML, но это было бы просто мелочью. . Хорошо, я думаю, это выскользнуло вопреки моему здравому смыслу, поэтому, поскольку я уже сказал это, я мог бы также привести пример:
If doc.XPathSelectElement("/product/Name") IsNot Nothing Then
' ...
End If
person
Steven Doggart
schedule
24.04.2014