簡體   English   中英

如何使用vb.net和linq讀取和修改xml文件

[英]How to read and modify an xml file using vb.net and 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

只需使用兩個For Each循環。 一個在每個<Claim>上循環,一個在每個<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現在是:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM