2014-07-02 127 views
0

我只能讀取和編輯第一個聲明,但是我需要代碼才能在所有聲明中執行相同操作。它必須在每個索賠中計算行數,並在每行中寫入行號。下面是xml文件;如何使用vb.net和linq讀取和修改xml文件

<ClaimBatch> 
    <Claims> 
    <Claim> 
     <claimGross>4947.7200</claimGross> 
     <numLines>2</numLines> 
     <Line> 
     <lineNo>1</lineNo> 
     <benefitAmount>2473.8600</benefitAmount> 
     <levy>247.3860</levy> 
     </Line> 
     <Line> 
     <lineNo>2</lineNo> 
     <benefitAmount>2473.8600</benefitAmount> 
     <levy>247.3860</levy> 
     </Line> 
    </Claim> 
    <Claim> 
     <claimGross>549.6800</claimGross> 
     <numLines>2</numLines> 
     <Line> 
     <benefitAmount>274.8400</benefitAmount> 
     <levy>48.0976</levy> 
     </Line> 
     <Line> 
     <benefitAmount>274.8400</benefitAmount> 
     <levy>48.0976</levy> 
     </Line> 
    </Claim> 
    </Claims> 
</ClaimBatch> 

下面是我迄今使用的代碼;

Public Sub writeLineNo() 

Dim counter As Integer = 1 
    Dim reader As XmlReader = XmlReader.Create("C:\SQLQUERIS\" & cmbschemetxt & " " & dateStr & ".xml") 
    xmlDoc = XDocument.Load("C:\SQLQUERIS\" & cmbschemetxt & " " & dateStr & ".xml") 

    For Each line In xmlDoc.<ClaimBatch>.<Claims>.<Claim>.<Line> 
     If reader.ReadToFollowing("Line") Then 
      reader.MoveToContent() 
      While reader.ReadToNextSibling("Line") 
       line.AddFirst(<lineNo><%= counter %></lineNo>) 
       counter += 1 
      End While 
     End If 
    Next 
    reader.Close() 
    xmlDoc.Save("C:\SQLQUERIS\" & cmbschemetxt & " " & dateStr & ".xml") 
End Sub 

回答

0

只需使用兩個For Each循環即可。一個循環遍歷每個<Claim>,一個遍歷每個<Claim>內的每個<line>

給出下面的XML

Dim xml = <ClaimBatch> 
      <Claims> 
       <Claim> 
        <claimGross>4947.7200</claimGross> 
        <numLines>2</numLines> 
        <Line> 
         <benefitAmount>2473.8600</benefitAmount> 
         <levy>247.3860</levy> 
        </Line> 
        <Line> 
         <benefitAmount>2473.8600</benefitAmount> 
         <levy>247.3860</levy> 
        </Line> 
       </Claim> 
       <Claim> 
        <claimGross>549.6800</claimGross> 
        <numLines>2</numLines> 
        <Line> 
         <benefitAmount>274.8400</benefitAmount> 
         <levy>48.0976</levy> 
        </Line> 
        <Line> 
         <benefitAmount>274.8400</benefitAmount> 
         <levy>48.0976</levy> 
        </Line> 
       </Claim> 
      </Claims> 
      </ClaimBatch> 

使用嵌套的循環,如:

For Each claim in xml.<Claims>.<Claim> 
    Dim counter = 1 
    For Each line in claim.<Line> 
     line.AddFirst(<lineNo><%= counter %></lineNo>) 
     counter += 1 
    Next 
Next 

xml現在是:

enter image description here