对于在xml文档(aobjXMLCaseDoc)中循环的每个语句,我有3条,然后检查这些法规是否符合以下法规-- 260C.405,518.131,518B.01,609.748,629.75
我想把每一份发言的这3份合并成一份。我该怎么做?
XML
<?xml version="1.0" encoding="UTF-8"?>
<Charge>
<ChargeHistory ChargeHistoryID="387">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<ChargeHistory ChargeHistoryID="398">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<ChargeHistory ChargeHistoryID="517">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<Deleted>false</Deleted>
</Charge>VB代码
'Check if statute has 8 characters
For Each objXMLStatuteNode In aobjXMLCaseDoc.DocumentElement.SelectNodes("Case/Charge/ChargeHistory/Statute/StatuteNumber")
If objXMLStatuteNode.InnerText.Length >= 8 Then
strStatuteEightDigits = objXMLStatuteNode.InnerText.Substring(0, 8)
Select Case strStatuteEightDigits
Case "260C.405"
blnNotSpecifiedStatute = False
Case Else
blnNotSpecifiedStatute = True
End Select
End If
Next
'Check if statute has 7 characters
For Each objXMLStatuteNode In aobjXMLCaseDoc.DocumentElement.SelectNodes("Case/Charge/ChargeHistory/Statute/StatuteNumber")
If objXMLStatuteNode.InnerText.Length >= 7 Then
strStatuteSevenDigits = objXMLStatuteNode.InnerText.Substring(0, 7)
Select Case strStatuteSevenDigits
Case "518.131", "518B.01", "609.748"
blnNotSpecifiedStatute = False
Case Else
blnNotSpecifiedStatute = True
End Select
End If
Next
'Check if statute has 6 characters
For Each objXMLStatuteNode In aobjXMLCaseDoc.DocumentElement.SelectNodes("Case/Charge/ChargeHistory/Statute/StatuteNumber")
If objXMLStatuteNode.InnerText.Length >= 6 Then
strStatuteSixDigits = objXMLStatuteNode.InnerText.Substring(0, 6)
Select Case strStatuteSixDigits
Case "629.75"
blnNotSpecifiedStatute = False
Case Else
blnNotSpecifiedStatute = True
End Select
End If
Next发布于 2017-07-19 16:47:15
您所做的所有代码似乎都是检查是否有任何法规编号以开头的五个字符串中的一个("260C.405“、"518.131”、"518B.01“、"609.748”、"629.75")。您可以使用StartsWith来完成这一任务。
您可以使用Any检查任何法规编号是否满足某些测试,该测试还可以使用Any查看法规编号是否以字符串列表开头。整件事可以在一次陈述中完成。
您提供的示例XML以<Charge>开头,但您的代码似乎假定<Charge>元素存在于<Case>元素中。为了保持一致,我从代码中删除了<Case>。如果需要的话,您需要将它放回(就在<Charge>之前)。
请注意,您的代码(以及下面的代码)检查以"629.75“开头的任何法规号,因此"629.751”将被视为匹配。有可能您想要检查以“629.75”开头的法规编号。而不是"629.75“
Private statutes As New List(Of String) From {"260C.405", "518.131", "518B.01", "609.748", "629.75"}
Private objXML As XDocument = <?xml version="1.0" encoding="UTF-8"?>
<Charge>
<ChargeHistory ChargeHistoryID="387">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<ChargeHistory ChargeHistoryID="398">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<ChargeHistory ChargeHistoryID="517">
<Statute>
<StatuteNumber>609.352.2a(2)</StatuteNumber>
</Statute>
</ChargeHistory>
<Deleted>false</Deleted>
</Charge>
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim blnNotSpecifiedStatute As Boolean
blnNotSpecifiedStatute = Not objXML.<Charge>.<ChargeHistory>.<Statute>.<StatuteNumber>.Any(Function(n) statutes.Any(Function(s) n.Value.StartsWith(s)))
'Do something with blnNotSpecifiedStatute
End Sub发布于 2017-07-19 14:24:39
使用If-ElseIf:
For Each objXMLStatuteNode In aobjXMLCaseDoc.DocumentElement....
If objXMLStatuteNode.InnerText.Length >= 8 Then
''' Checks for 8 or more chars
....
ElseIf objXMLStatuteNode.InnerText.Length = 7 Then
''' Checks for 7 Chars
....
ElseIf objXMLStatuteNode.InnerText.Length = 6 Then
''' Checks for 6 chars
....
Else
''' For Less than 6 chars
End If
Next此外,我认为您的逻辑可能需要一些调整,因为8是>= 8,但它也是>= 7,也是>= 6。
https://stackoverflow.com/questions/45192838
复制相似问题