2012-04-12 11 views
0

xpath式をXmlDocumentに渡して、SelectNodes(式)を呼び出しています - 部分文字列だけを返そうとしています。これまでに試したことがありますXpath式のノードの部分文字列を取得する方法

substring(//Container/__name,2) 
substring(//Container/__name/text(),2) 
//Container/__name/substring(.,2) 
//Container/__name/text()/substring(.,2) 

(私は絶望的になっています)。

彼らはすべてのコンテナ/ __名/テキスト()を経由して、作品(それは6つの文字です)//

(「式がノードセットに評価されなければなりません」)エラーを与えます。

これは正しい方法はありますか?

EDIT: - これは、XML文書はによって変更されることを可能にするユーティリティです ここで正確なコード(あまりにも壮大な何もない)

nodeList = xdoc.SelectNodes(xpathBox.Text); 

は、私は本当に純粋なXPathのソリューションを思い付くしようとしているのですxpath式と文字列を提供します。文字列は、xpath式で選択されたノード内のテキストの置き換えです。私は部分的な交換をしたい。したがって、これが不可能な場合、私の目標を最もうまく達成する方法についての提案はありますか?xpath式と文字列のみを使用してテキストノードの一部を文字列に置き換えます。おそらく別の機能?

答えて

1

のXPathの評価の結果は、SelectNodesよりも、代わりに使用Evaluateを設定するノードでない場合:

string substr = xdoc.CreateNavigator().Evaluate("substring(//Container/__name,2)") as string; 

あなたのような何かを行うことができ、すべての__name要素内のテキストを変更するにはthis:

foreach (XmlNode node in xdoc.SelectNodes("//Container/__name")) { 
    XmlElement nameElement = node as XmlElement; 
    nameElement.InnerText = nameElement.InnerText.Substring(2); 
    } 
+0

私はゆっくりとEvaluate()を使用する方法を考え出しましたが、それはa)tha私は何をしようとしているのか、b)私がやろうとしていることをすることはできないかもしれません。 – Aerik

+0

私はあなたがEvaluate()に特有の問題を抱えている場合、それをかなり使っています...あなたがやろうとしていることをすることができない場合は、申し訳ありません! – MiMo

+0

ありがとうMiMo、それは苦情ではなく、(多分暗黙の質問で)観測でした。 – Aerik

0

問題は、これを実行しようとしているところです。戻り値はノードセットとして期待されており、文字列を返そうとしています。

ノードを最初に返してから、文字列関数を実行するだけです。

text()ノードをコードに戻すと、その文字列が6文字であることを確認できます。その部分文字列を実行できますか?

var new = old.Substring(1,2)

関連する問題