Laden...

XPath Abfrage

Erstellt von Rainer Wein vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.166 Views
R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 15 Jahren
XPath Abfrage

Hallo zusammen,
ich habe erst vor kurzem mit C# angefangen habe also noch nicht so viel Erfahrung.

Nun zu meinem Problem.
Ich möchte prüfen ob in dieser Xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Settings>
  <Database>
    <DB-Path />
  </Database>
  <!--Profil-->
  <Profil value="standard ">
    <Host>test</Host>
    <Login>Max</Login>
    <Passwort>Max</Passwort>
    <Port>25</Port>
  </Profil>
</Settings>

ein Profil mit value=lala existiert. Der value Wert wird aber erst zur Laufzeit erzeugt.
Zur Suche habe ich diesen Code verwendet:


XmlDocument doc = new XmlDocument();
            doc.Load("x:\profile.xml");
            XmlNode node = doc.SelectSingleNode("//Profil[@value=$Test]");

Leider bekomme ich von VS2008 diese Fehlermeldung:
"Namespace-Manager oder 'XsltContext' erforderlich. Diese Abfrage hat einen Präfix, eine Variable oder eine benutzerdefinierte Funktion."

Wenn ich der Variable value aber einen konkreten Wert zuweise (@value='standard') funktioniert es.
Gibt es eine möglichkeit statt eines konkreten Wert eine Variable zu nutzen?

C
401 Beiträge seit 2007
vor 15 Jahren

Hi,

also ich nehme mal durch das $Test an, dass du aus der PHP Welt kommst? Um einen String in C# zu bauen könntest du String.Format benutzen. $ Zeichen haben in C# nichts verloren.

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 15 Jahren

Der String wird aus einer TextBox gelesen und in der Variable Test geschrieben.
Das $Test hab ich nur verwendet weil ich irgendwo gelesen hatte das es wohl so funktionieren soll.

C
401 Beiträge seit 2007
vor 15 Jahren

Also du könntest folgendes tun:



string test = "standard";
string xPath = String.Format("//Profil[@value=\"{0}\"]", test);

XmlDocument doc = new XmlDocument();
doc.Load(@"x:\profile.xml");
XmlNode node = doc.SelectSingleNode(xPath);

edit:

Erklärung: Mit String.Format kannst du Variablen in einen String einfügen. {0} ist ein Platzhalter für die Variable und die Zahl innerhalb der geschweiften Klammern gibt die Parameternummer an.

Beispiel:


String.Format("Paramter1:{0}, Parameter2:{1}", p1, p2);

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 15 Jahren

Wunderbar das funktioniert.
Vielen Dank.
Das Bedeutet man kann mit Xpath keine Variable, außer über diesen Umweg nutzen?

C
401 Beiträge seit 2007
vor 15 Jahren

Zumindest nicht in C#. Wie gesagt, die Syntax mit dem $ sieht eher nach PHP oder Perl aus.