Xml 如何将3组合为循环?
在xml文档(aobjXMLCaseDoc)中循环使用法规,然后检查这些法规是否与以下法规相匹配260C.405、518.131、518B.01、609.748、629.75 我想将这3个for-each组合成一个for-each语句。 我该怎么做 XMLXml 如何将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
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