Вы можете использовать метод расширения для более быстрой обработки чека IsNot Nothing
:
<Extension()>
Sub SafeTransform(ByVal element As XElement, ByVal transform As Action(Of XElement))
If element IsNot Nothing Then
transform(element)
End If
End Sub
Вам нужно будет определить преобразование как отдельный метод:
Sub Transform(ByVal element As XElement) As XElement
'' # do my transformation
End Sub
Назовите это так:
doc.<bignode>.<smallnode>.SingleOrDefault.SafeTransform(AddressOf Transform)
Вы также можете использовать лямбда-выражение:
Dim transform As Action(Of XElement) = Sub(element)
'' # do my transformation
End Sub
doc.<bignode>.<smallnode>.SingleOrDefault.SafeTransform(transform)
Эти преобразования являются подпрограммами, а не функциями. Если вы вместо этого хотите вернуть преобразованные XElement
объекты, вы действительно должны заглянуть в LINQ to XML .
Вот глупый пример LINQ to XML:
Dim doc As XDocument =
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Big>
<Small Name="Foo"/>
<Other Name="Bar"/>
</Big>
Dim transformedDoc = new XDocument( _
new XElement( _
doc.Root.Name,
doc.Root.Elements.Select( _
Function(element) _
If(element.Name = "Small", new XElement("Transformed", element.Attributes()), element))))
Это преобразованный XML:
<Big>
<Transformed Name="Foo"/>
<Other Name="Bar"/>
</Big>