我正在运行一个代码,我正在阅读XML文件并使用vb.net将其保存在本地变量中。
可悲的是,并非所有的XML都具有相同的结构,所以我遇到的问题是,如果我尝试映射的那些字段中的一个字段丢失,它将停止运行代码并提示错误
我想,如果某个字段不是基金,请将其保留为空并运行代码直到结束。
我尝试使用try和catch没有运气。
Var1 = xmlNode.SelectSingleNode("Test1").InnerText
Var2 = xmlNode.SelectSingleNode("Test2").Value
Var3 = xmlNode.SelectSingleNode("Test3").InnerText
现在,如果其中一个xml上缺少Var2,它将停止运行代码,即使存在也不会使用Var3。
谢谢
答案 0 :(得分:3)
如果您使用的是Visual Studio 2015,则可以使用空传播运算符?
Var1 = xmlNode?.SelectSingleNode("Test1")?.InnerText
Var2 = xmlNode?.SelectSingleNode("Test2")?.Value
Var3 = xmlNode?.SelectSingleNode("Test3")?.InnerText
如果您使用较旧的东西,那么您将不得不这么做:
If xmlNode IsNot Nothing Then
Dim node = xmlNode.SelectSingleNode("Test1")
If node IsNot Nothing then Var1 = node.InnerText
node = xmlNode.SelectSingleNode("Test2")
If node IsNot Nothing then Var1 = node.Value
'etc.
End If
请注意,您可以使用Try...Catch
执行此操作,但这将是丑陋的代码:
Try
Var1 = xmlNode.SelectSingleNode("Test1").InnerText
Catch ex As Exception
'ignore
End Try
Try
Var2 = xmlNode.SelectSingleNode("Test2").Value
Catch ex As Exception
'ignore
End Try
Try
Var3 = xmlNode.SelectSingleNode("Test3").InnerText
Catch ex As Exception
'ignore
End Try
所以如果你有很多这样的话,你最好将它包装在一个函数中:
Public Shared Function GetNodeInnerText(node as XmlNode, nodeName As String) As String
If node Is Nothing Then Return ""
Dim singleNode = node.SelectSingleValue(nodeName)
If singleNode Is Nothing Then Return ""
Return singleNode.InnerText
End Function
答案 1 :(得分:0)
您可以使用nuget package Monads.net。得到monad"可能"。 使用它:
var1 = xmlNode.SelectSingleNode("Test1").With(Function(c) c.InnerText)
在内部检查节点是否为空,如果不是,则返回InnerText,在另一种情况下返回null。