Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何将3组合为循环?_Xml_Vb.net - Fatal编程技术网

Xml 如何将3组合为循环?

Xml 如何将3组合为循环?,xml,vb.net,Xml,Vb.net,在xml文档(aobjXMLCaseDoc)中循环使用法规,然后检查这些法规是否与以下法规相匹配260C.405、518.131、518B.01、609.748、629.75 我想将这3个for-each组合成一个for-each语句。 我该怎么做 XML 609.352.2a(2) 609.352.2a(2) 609.352.2a(2) 假的 VB代码 “检查规约是否有8个字符 对于aobjXMLCaseDoc.DocumentElement.SelectNodes中的每个objxmlst

在xml文档(aobjXMLCaseDoc)中循环使用法规,然后检查这些法规是否与以下法规相匹配260C.405、518.131、518B.01、609.748、629.75

我想将这3个for-each组合成一个for-each语句。 我该怎么做

XML


609.352.2a(2)
609.352.2a(2)
609.352.2a(2)
假的
VB代码

“检查规约是否有8个字符
对于aobjXMLCaseDoc.DocumentElement.SelectNodes中的每个objxmlstatentode(“案例/收费/收费历史记录/法规/法定编号”)
如果objxmlstationode.InnerText.Length>=8,则
strStatuteEightDigits=objxmlstateNode.InnerText.Substring(0,8)
选择Case strStatuteEightDigits
判例“260C.405”
blnNotSpecifiedStatute=False
其他情况
blnNotSpecifiedStatute=True
结束选择
如果结束
下一个
'检查规约是否有7个字符
对于aobjXMLCaseDoc.DocumentElement.SelectNodes中的每个objxmlstatentode(“案例/收费/收费历史记录/法规/法定编号”)
如果objXMLStatuteNode.InnerText.Length>=7,则
strStatuteSevenDigits=objxmlstateNode.InnerText.Substring(0,7)
选择案例strstatesevendogits
判例“518.131”、“518B.01”、“609.748”
blnNotSpecifiedStatute=False
其他情况
blnNotSpecifiedStatute=True
结束选择
如果结束
下一个
'检查规约是否有6个字符
对于aobjXMLCaseDoc.DocumentElement.SelectNodes中的每个objxmlstatentode(“案例/收费/收费历史记录/法规/法定编号”)
如果objxmlstationode.InnerText.Length>=6,则
strStatuteSixDigits=objxmlstateNode.InnerText.Substring(0,6)
选择Case strstatesixdigits
案例“629.75”
blnNotSpecifiedStatute=False
其他情况
blnNotSpecifiedStatute=True
结束选择
如果结束
下一个
如果出现以下情况,请使用:

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。

您的代码所做的一切似乎都是检查法规号是否以五个字符串(“260C.405”、“518.131”、“518B.01”、“609.748”、“629.75”)中的一个开头。您可以使用
StartsWith
来执行此操作

您可以使用
Any
检查任何法规号是否符合某些测试,该测试还可以使用
Any
查看法规号是否以任何字符串列表开头。整件事都可以在一句话中完成

您提供的示例XML以
开头,但您的代码似乎假定
元素存在于
元素中。为了保持一致,我从代码中删除了
。如果需要,您需要将其放回(紧靠
之前)

请注意,您的代码(以及下面我的代码)检查以“629.75”开头的任何法规号,因此“629.751”将被视为匹配。您可能希望检查以“629.75”开头的法规编号,而不是以“629.75”开头的法规编号

私人法规作为{“260C.405”、“518.131”、“518B.01”、“609.748”、“629.75”中的新列表(字符串)
私有objXML作为XDocument=
609.352.2a(2)
609.352.2a(2)
609.352.2a(2)
假的
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
Dim blnNotSpecifiedStatute为布尔值
blnNotSpecifiedStatute=非objXML…..任何(函数n)规约.Any(函数n.Value.StartsWith(s)))
“用blnNotSpecifiedStatute做点什么
端接头

我甚至不认为这是可行的,因为blnNotSpecifiedStatute的值完全取决于最后一次检查。这就是我寻求帮助的原因。这是否意味着我不需要通过案例/费用/费用历史记录/法令/法令编号来查找法令编号?我试图做的是使用xml文档并查找法规,看看xml文档中是否有符合这些法规的260C.405、518.131、518B.01609.748、629.75。如果有匹配项,那么我想将blnNotSpecifiedStatute设置为False,如果没有匹配项,则将blnNotSpecifiedStatute设置为true。答案中的代码导致执行循环,它只在一条语句中完成所有操作<代码>objXML…..任何(函数(n)…)都将处理每个元素。元素成为
函数(n)
中的
n
。我确实对您的示例进行了一些更改,现在我的代码正在运行。因为我不想一直丢分,所以我不会在这里添加代码。我冒着被禁止的危险!
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