1

私は次のXMLを持っています:

<XMLDictionary>
  <a>b</a>
  <c>d</c>
  <e>f</e>
</XMLDictionary>

マッピングa:b、c:d、e:fを取得しようとしていますが、それを簡単に行う方法を見つけることができません。

私の現在のコードは次のようになります。

    Do While reader.Read()
        If reader.NodeType = Xml.XmlNodeType.Element Then
            Me.Add(reader.Name, reader.ReadElementString)
        End If
    Loop

問題は、ReadElementStringを呼び出さずに要素の内容を読み取る方法がわからないことです。ReadElementStringは「ポインター」を次のノードに進めます(したがって、reader.Nameにはすでに次の値があります)。ループ内でRead()を再度呼び出すと、ノードをスキップします。
私はこのテーマでいくつかのバリエーションを試しましたが、どれも完璧に機能しません。これは、ここで重要な何かが欠けていることを示しています。

ポインタはありますか?

ありがとう

4

4 に答える 4

2

あなたがしていることにXmlReaderを使用するかどうかはわかりませんが、おそらくXmlDocumentだけですが、リーダーが必要な場合は、おそらく次のようなものが機能する可能性があります。

Dim lastNode As String = string.Empty
Do While reader.Read()
     If reader.NodeType = Xml.XmlNodeType.Element Then
        lastNode = reader.Name
     Else If reader.NodeType = Xml.XmlNodeType.Text AND NOT string.IsNullOrEmpty(lastNode) THEN
         Me.Add(lastNode,reader.Value)
         lastNode = string.Empty    
     End If
Loop

構文エラーは許してください。VB.netで書かれてからしばらく経ちました。これは、要素が見つかったかどうかを最初に検出してから、テキスト値の検索を開始する基本的なステートマシンです。

于 2009-07-10T21:16:31.737 に答える
0

これを試してください(テストされていません):

    Do While reader.Read()
            If reader.NodeType = Xml.XmlNodeType.Element Then
                    Me.Add(reader.Name, reader.Value)
            End If
    Loop
于 2009-07-10T21:01:26.180 に答える
0

reader.ReadElementString()の代わりにreader.ReadString()を使用するのはどうですか?または、その代わりに、reader.Valueを使用して現在のノードの値を取得することもできます。

于 2009-07-10T21:19:22.573 に答える
0
   Dim name As String
   Dim value As String

   While reader.Read()
        If reader.NodeType = XmlNodeType.Element Then
            name = reader.Name
            reader.Read()
            value = If((String.IsNullOrEmpty(reader.Value) OrElse reader.Value.Contains(Environment.NewLine)), "", reader.Value)
            Me.Add(name, value)
        End If
    End While
于 2009-07-10T22:27:03.607 に答える