2011-12-29 6 views
1

いくつかの入れ子にされたノードを持つこのxmlファイルを解析しようとしています。私はここにきれいに見えるXMLファイルのコンテンツを置く方法を知らない。もしあなたが私にどのように教えることができれば、それも素晴らしいでしょう。xmlreaderとvb.netを使用して入れ子になったノードでxmlファイルを解析する

これは私のコードです。私はいくつかの情報を取得することができますが、それらのうちのいくつかは正しくありません(strGrantにはstrSupportの値があります)。 誰かが自分のコードに何が間違っているか教えてもらえますか?私はここで初心者です。どんな助けもありがとう!

Dim strGrant, strSupport, strDatabank, strWeight, strNumOfGrants, strNumOfSupports, strNumOfDatabanks As String 

    While XmlReader.Read() 
     Console.WriteLine("{0}: {1}", XmlReader.NodeType.ToString(), XmlReader.Name) 

     If XmlReader.Name.ToString() = "GrantInfo/NumberOfGrants" Then strNumOfGrants = Trim(XmlReader.ReadString()) 

     If XmlReader.Name.ToString() = "NumberOfGrants" Then strNumOfGrants = Trim(XmlReader.ReadString()) 

     If (XmlReader.Name.ToString() = "Grant/CLabelInfo") Then strGrant = XmlReader.ReadString() 

     If XmlReader.Name.ToString() = "Name" Then strGrant = XmlReader.ReadString() 
     ' ''End If 

     If XmlReader.Name.ToString() = "CleanUpData/DatabankInfo/NumberOfDatabanks" Then strNumOfDatabanks = Trim(XmlReader.ReadString()) 

     If XmlReader.Name.ToString() = "NumberOfDatabanks" Then strNumOfDatabanks = Trim(XmlReader.ReadString()) 

     If XmlReader.Name.ToString() = "Databank/CLabelInfo" Then strDatabank = Trim(XmlReader.ReadString()) 

     If XmlReader.Name.ToString() = "Name" Then strDatabank = XmlReader.ReadString() 

     If XmlReader.Name.ToString() = "Confidence" Then strWeight = XmlReader.ReadString() 


     If XmlReader.Name.ToString() = "Name" And XmlReader.NodeType.ToString() = "EndElement" Then 

      Response.Write("- Number of Grants: " & strNumOfGrants & "<br>") 
      Response.Write("- Grant Numbers: " & strGrant & "<br>")   

     End If 
     If XmlReader.Name.ToString() = "CleanUpData/SupportInfo/NumberOfSupports" Then strNumOfSupports = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "NumberOfSupports" Then strNumOfSupports = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "Support/CLabelInfo" Then strSupport = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "Name" Then strSupport = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "CLabelInfo" And XmlReader.NodeType.ToString() = "EndElement" Then 
      Response.Write("- Number of Supports: " & strNumOfSupports & "<br>") 
      Response.Write("- Support Number: " & strSupport & "<br>") 

     End If 
     If XmlReader.Name.ToString() = "CleanUpData/DatabankInfo/NumberOfDatabanks" Then strNumOfSupports = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "NumberOfDatabanks" Then strNumOfDatabanks = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "Databank/CLabelInfo" Then strDatabank = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "Name" Then strDatabank = Trim(XmlReader.ReadString()) 
     If XmlReader.Name.ToString() = "CLabelInfo" And XmlReader.NodeType.ToString() = "EndElement" Then 
      Response.Write("- Number of Databanks: " & strNumOfDatabanks & "<br>") 
      Response.Write("- Databank Number: " & strDatabank & "<br>") 

     End If 
    End While 
    XmlReader.Close() 

これは私の結果である:補助金の

数:1
- グラント番号:DK30111
- 支持体の数:
- サポート番号:
- データバンクの数:
- データバンク番号:
- 助成金番号:1
- 助成金番号:NIHExtra
- 支持体の数:1
- サポート番号:
- データバンクの数:
- データバンク数:
- 補助金の数:1つの
- グラント番号:のRefSeq/NM_007614
- 支持体の数: 1
- サポート番号:
- データバンクの数:
- データバンク数:
- 補助金の数:1つの
- グラント番号:のRefSeq/NM_008084
- 支持体の数:1
- サポート番号:
- データバンクの数:
- データバンク数:
- 補助金の数:1
- グラント番号:[FOUND NOT]
- 支持体の数:1
- サポート番号:
- データバンクの数:
- データバンク数:

+0

あなたは 'XmlReader'を使うことに制限されていますか? XMLへのLINQの使用はずっと簡単です。 –

答えて

0

誤ったノード名を使用しているためです。ノード名には、現在のノードの名前のみが含まれ、名前の階層は含まれません。

これを反映するために、名前のステートメントを変更する必要があります。比較がケースステートメントであった場合も、より効率的です。最後に、ファイルの大文字と小文字の違いを説明するために、大文字と小文字を比較する必要があります。ここで

は一例です:

Select Case XmlReader.Name.ToString().ToLower 
    Case "numberofgrants" 
     strNumOfGrants = Trim(XmlReader.ReadString()) 

End Select 

あなたはこの形式に休息を変換することができるはずです。

+0

あなたのクイックアンサーに感謝します。それは助けになった。私は別の質問があります。同じノード名で親ノード名が異なる入れ子ノードを検索するにはどうすればよいですか? – dylanm

+0

@dylanm:これは新しい質問として最もよく尋ねられ、他の人が答えから恩恵を受けることができます(つまり、コメントには埋め込まれません)。また、答えがあなたの質問を解決するのに役立つならば、チェックマークと評判が十分にあるときは、答えの横にある上矢印をクリックすることを覚えておいてください。この方法で将来の訪問者があなたの質問を解決したことを知ることができます。 –

+0

:ありがとうございます。そうします – dylanm

関連する問題