首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何组合3 for循环?

如何组合3 for循环?
EN

Stack Overflow用户
提问于 2017-07-19 13:58:57
回答 2查看 75关注 0票数 2

对于在xml文档(aobjXMLCaseDoc)中循环的每个语句,我有3条,然后检查这些法规是否符合以下法规-- 260C.405,518.131,518B.01,609.748,629.75

我想把每一份发言的这3份合并成一份。我该怎么做?

XML

代码语言:javascript
复制
<?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代码

代码语言:javascript
复制
'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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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“

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-07-19 14:24:39

使用If-ElseIf:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45192838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档