0

xmlドキュメントに関するもう1つの質問。だから、私はメッセージ本文(テキスト)でメッセージを見つけたいと思っています、そして私はfind()メソッドを書きました:

public void find(string searchText)
{
    XmlNodeList smss = xmlDoc.SelectNodes("//sms");
    searchText = txtFind.Text;

    foreach (XmlNode sms in smss)
    {
        if (sms.Attributes["body"].InnerText.Contains(searchText))
        {
            txtName.Text = sms.Attributes["body"].InnerText +
                           sms.Attributes["time"].Value;
            break;
        }
    }
}

このメソッドは、検索文字列を含む最初のメッセージを検索し、それをtxtNameテキストボックスに書き込みます。ここで、同じ文字列を含む次のメッセージを検索し、それをtxtnameテキストボックスに追加します。つまり、findNext()メソッドを記述します。私はそれを行う方法を理解することはできません。

4

2 に答える 2

1

forループを使用してカウンターの状態を保存し、XMLNodeListからカウンター要素をジャンプして、そこから検索を再開できます。次に例を示します。

//Assumes i is declared somewhere else 
for (i ; i < smss.Count; i++)
{
    if (smss[i].Attributes["body"].InnerText.Contains(searchText))
    {
        txtName.Text = smss[i].Attributes["body"].InnerText +
                       smss[i].Attributes["time"].Value;
        break;
    }
}
于 2013-03-18T20:14:49.870 に答える
0

あなたが探しているこのようなものかどうかはわかりませんが、うまくいけば、次の例があなたを助けることができるかもしれません

Private Sub CommandButton1_Click()
If OptionButton1 Then
Dim MyValue, MyFindNext
    [A1].Select
    MyValue = TextBox1.Value

    On Error GoTo err_Trap
    Cells.Find(What:=MyValue, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate

    MyFindNext = vbYes
    Do Until MyFindNext <> vbYes
    MyFindNext = MsgBox("Would you like to find the next instance of " & MyValue & "?", _
        vbYesNo, "Find Next")
        If MyFindNext = vbNo Then
        Unload UserForm1
        Exit Sub
        End If
    Cells.FindNext(After:=ActiveCell).Activate
    Loop
    On Error GoTo 0
    Exit Sub
End If

If OptionButton2 Then
    [A1].Select
    MyValue = TextBox1

    On Error GoTo err_Trap
    Cells.Find(What:=MyValue, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate

    MyFindNext = vbYes
    Do Until MyFindNext <> vbYes
    MyFindNext = MsgBox("Would you like to find the next instance of " & MyValue & "?", _
        vbYesNo, "Find Next")
        If MyFindNext = vbNo Then
        Unload UserForm1
        Exit Sub
        End If
    Cells.FindNext(After:=ActiveCell).Activate
    Loop
    On Error GoTo 0
    Exit Sub

err_Trap:
    If Err.Number = 91 Then
        MsgBox "Could not find " & MyValue & " anywhere on this sheet.", , "Search failed"
    Else
        MsgBox Err.Number & ": " & Err.Description
    End If
End If
End Sub

詳細については、このリンクを参照してください

http://www.knowexcel.com/view/931222-findnext-method-help-.html

于 2013-03-18T19:51:32.503 に答える