0

xpath式をXmlDocumentに渡し、SelectNodes(expression)を呼び出しています-部分文字列だけを返そうとしています。これまでに試しました

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

(あなたは私が必死になっているのを見ることができます)。

それらはすべてエラーを出します(「式はノードセットに対して評価する必要があります」)

// Container / __ name / text()は機能します(ちなみに、6文字の長さです)。

これを行う正しい方法は何ですか?

編集:これが正確なコードです(あまり壮観なものはありません)

nodeList = xdoc.SelectNodes(xpathBox.Text);

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

4

2 に答える 2

1

XPathの評価の結果がノードセットではない場合は、次のEvaluate代わりに使用しSelectNodesます。

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

すべての要素内のテキストを変更するには、次の__nameようにします。

  foreach (XmlNode node in xdoc.SelectNodes("//Container/__name")) {
    XmlElement nameElement = node as XmlElement;
    nameElement.InnerText = nameElement.InnerText.Substring(2);
  }
于 2012-04-13T13:52:44.167 に答える
0

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

最初にノードを返し、次にそのノードで文字列関数を実行する必要があります。

ノードをコードに戻し、text()6文字の長さであることを確認したら、その上でサブストリングを実行できますか?

var new = old.Substring(1,2)

于 2012-04-12T22:14:56.617 に答える