2012-04-12 5 views
0

Ich übergebe einen Xpath-Ausdruck zu einem XmlDocument und Aufruf von SelectNodes (Ausdruck) - Ich versuche, nur die Teilzeichenfolge zurückzugeben. Bisher habe ich versuchtSo erhalten Sie einen Teilstring eines Knotens in einem Xpath-Ausdruck

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

(Sie können sehen, ich bin verzweifelt).

Sie alle geben Fehler ("Expression zu einem Knotensatz auswerten müssen")

// Container/__ Name/Text() funktioniert, übrigens (und es ist 6 Zeichen lang).

Was ist der richtige Weg?

EDIT: Hier ist der genaue Code (nichts allzu spektakulär)

nodeList = xdoc.SelectNodes(xpathBox.Text); 

Ich bin wirklich zu kommen mit einer reinen XPath-Lösung versucht - das ist ein Dienstprogramm, das ein XML-Dokument erlaubt durch geändert werden Bereitstellung eines xpath-Ausdrucks und eines Strings - der String ist der Ersatz für den Text in dem durch den xpath-Ausdruck ausgewählten Knoten. Ich möchte in der Lage sein, teilweise Ersatz zu machen. Also, wenn das nicht möglich ist, gibt es einen Vorschlag, wie ich mein Ziel am elegantesten erreichen kann: Ersetzen eines Teils eines Textknotens durch eine Zeichenfolge, wobei nur ein XPath-Ausdruck und eine Zeichenfolge verwendet werden. Eine andere Funktion vielleicht?

Antwort

1

Wenn das Ergebnis der Auswertung des XPath kein Gebrauch Knotensatz ist Evaluate statt als SelectNodes:

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

Um den Text in allen __name Elemente ändern Sie etwas tun können, wie dies:

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

Ich habe langsam herauszufinden, wie Evaluate() zu verwenden, aber es scheint wie a) tha Das erreicht nicht ganz das, was ich versuche zu tun und b) Vielleicht ist es nicht möglich zu tun, was ich versuche zu tun. – Aerik

+0

Ich sehe - wenn Sie ein spezifisches Problem mit Evaluate() haben, verwende ich es ziemlich viel ... wenn es nicht möglich ist zu tun, was Sie versuchen, tut es gut, tut mir leid! – MiMo

+0

Danke MiMo, es war eine Beobachtung (vielleicht mit einer implizierten Frage), keine Beschwerde. – Aerik

0

Das Problem ist, dass Sie versuchen, dies auszuführen. Der Rückgabewert wird als Knotengruppe erwartet und Sie versuchen, eine Zeichenfolge zurückzugeben.

Sie müssen den Knoten zuerst zurückgeben und dann nur eine Zeichenfolgenfunktion ausführen.

Sobald Sie den text() Knoten zu Ihrem Code zurückgeben, wo Sie überprüfen können, dass es 6 Zeichen lang ist, können Sie Teilstring darauf ausführen?

var new = old.Substring(1,2)

Verwandte Themen