2009-05-07 8 views
0

This questionは近いですが、それは順序の位置を探しています。与えられたソース文字列の実際のインデックス位置を探しています。XPathステートメントから文字列の位置(インデックス)を見つける方法はありますか?

ベター説明:

私は、.NET XmlDocumentオブジェクトにその文字列をロードしています以下の文字列

"<a> 
    <b>zyx</b> 
    <b>wvu</b> 
    <b>tsr</b> 
    <b>qpo</b> 
</a>" 

を持っています。キャリッジリターンとライン料金はここでの要因かもしれません。

Dim xmlSearchText As New XmlDocument() 
xmlSearchText.LoadXml(SearchTextBox.Text) 

Dim selectedNode As XmlNode = xmlSearchText.SelectSingleNode(txtSearch.Text) 

次のXPathステートメントは、3番目のノードを見つけるために使用することができます。

a/b[.='tsr'] 

しかし、私はそれが23の文字列インデックスではなく、3

の順序位置を返す必要があります

可能ですか?ありえない?

+0

参照するインデックスはどの文字ですか? –

+0

私は最初により大きい文字のインデックスを考えています。したがって、選択されたノードのOuterXmlが適切です。 –

答えて

0

これはあなたに何を望みますか?

selectedNodenode = xmlSearchText.SelectSingleNode("a/b[.='tsr']"); 
selectedNode.ParentNode.OuterXml.IndexOf(selectedNode.OuterXml) 

インデックスからルートを取得することはできませんが、親ノードからインデックスを取得できます。

+0

それは私をかなり近づけます。私は現在、このコメントの時点でSearchTextBox.Text.IndexOf(selectedNode.OuterXml)を使用しています。 –

0

XmlDocumentの代わりにXPathDocumentを使用すると、行番号と列の位置でIXmlLineInfoインターフェイスにアクセスできます。

XPathDocument document = new XPathDocument("file.xml"); 
XPathNavigator navigator = document.CreateNavigator(); 
XPathNavigator node = navigator.Select("a/b[.='tsr']"); 
IXmlLineInfo info = ((IXmlLineInfo)node); 
Console.WriteLine("Found at ({0},{1})",info.LineNumber,info.LinePosition); 

実際に文字列から文字インデックスが必要な場合は、文字列newlineを数えて列を追加することで推測できます。

関連する問題