Laden...

XPath Anfängerfrage

Erstellt von SaberRider vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.997 Views
SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren
XPath Anfängerfrage

Hi zusammen,

Ich versuche gerade krampfhaft ein Wert aus meinem XML auszulesen und "myNode" ist immer null 🙁
Wäre super wenn mal jemand kurz draufschauen könnte und mir meinen Fehler aufzeigen könnte.


XmlTextReader XMLreader = new XmlTextReader(sFile);
XmlDocument XMLdoc = new XmlDocument();
XMLdoc.Load(XMLreader);
XMLreader.Close();
XmlNode myNode;
XmlElement myElement = XMLdoc.DocumentElement; myNode = myElement.SelectSingleNode("/Fingerprints/FingerPrint[ID=" + iFingerprintID +"]/Area";);
sFingerPrintArea = myNode.Value;

XML:
<?xml version="1.0"?>
<Fingerprints>
<FingerPrint>
<ID>-35791123</ID>
<Area>A4:AB8</Area>
<Gitata>A9</Gitata>
<HotelName>A10</HotelName>
<Reisezeitbegin>01.01.2007</Reisezeitbegin>
<Reisezeitende>20.01.2007</Reisezeitende>
</FingerPrint>
</Fingerprints>

In dem Fall möchte ich einfach den fett gedruckten Wert ausgegeben haben.

Danke schonmal 🙂

Grüße

P.S.: sorry für die grottige Formatierung, irgendwie hab ich da den Dreh im Zusammenspiel mit dem Forum hier noch nicht raus 😉

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

Problem gelöst.. aber was genau die Lösung war darf man mich nicht fragen.

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

Hi again,

Ich hätt nochmal ne Frage...

Was ist an dieser XPath-Abfrage falsch?

Fingerprints/Fingerprint/FingerprintID[Fingerprints/Fingerprint/ExcelFile[@name="TESTPFAD für ein EXCEL FILE.xls"]]

Ich möchte damit, abhängig ob der ExcelFileName enthalten ist, die zugehörige FingerprintID des Fingerprint' herausfinden. Das Ergebnis soll also 1267719872 sein.


<?xml version="1.0"?>
<Fingerprints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Fingerprint>
<ExcelFile name="4 SUN PRO - VIVA SPANIEN - Tarifas y cupos - v ESP 3 03 (3).xls">
<Sheet index="0">Tarifas y cupos</Sheet>
</ExcelFile>
<ExcelFile name="TESTPFAD für ein EXCEL FILE.xls">
<Sheet index="0">TESTSHEET1</Sheet>
<Sheet index="1">Und noch eins</Sheet>
</ExcelFile>
<FingerprintID>1267719872</FingerprintID>
</Fingerprint>
<Fingerprint>
<ExcelFile name="2 SUN PRO - LOUIS 2006 - Rates Allotments.xls">
<Sheet index="0">Sheet1</Sheet>
<Sheet index="1">asgasdgdasgdasg</Sheet>
<Sheet index="2">425asfdfwf</Sheet>
<Sheet index="3">last one</Sheet>
</ExcelFile>
<FingerprintID>-35791123</FingerprintID>
</Fingerprint>
</Fingerprints>

Schonmal vielen Dank für die Hilfe. Hab mit XPath erst seit ner Woche zu tun und bin noch n bissi am schwimmen 😉 Gegoogelt hab ich schon ausführlich und leider nix brauchbares/verständliches gefunden.

liebe Grüße

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
476 Beiträge seit 2004
vor 17 Jahren

hallo SaberRider,

dein XPath-Ausdruck müsste wie folgt heissen:


Fingerprints/Fingerprint/FingerprintID[../ExcelFile[@name='TESTPFAD für ein EXCEL FILE.xls']]

Warum? Die Position innerhalb des []-Blocks ist abhängig von dem übergeordneten Knoten, sprich FingerprintID. Mit ".." springst du zurück zum Elternknoten um dann entsprechend den Kindknoten zufinden der 'TESTPFAD für ein EXCEL FILE.xls' als Wert für den Namens-Attribut hat.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

Hi Yellow,

vielen vielen Dank für die Hilfe und die zugehörige Erklärung. Klingt irgendwie logisch was du schreibst 👍 und natürlich funktionierts 🙂

Wünsch Dir schonmal n schönes WE, auch wenns noch n paar Stunden sind 😉

Grüße aus Mannheim,
Gøran

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)
T
108 Beiträge seit 2005
vor 17 Jahren

Moin!

Mal kurz ein Hinweis zu Deinem XML File bzw. ganz allgemein:

In der ersten Zeile eines XML Dokuments sollte immer eine _korrekte _ XML deklaration stattfinden.
Richtig wäre wenn neben der Version der Spezifikation auch angaben über das Character Set gemacht werden.

Das sollte dann z.B. so aussehen:

<?xml version="1.0" encoding="ISO-8859-1"?>

Ein weiterer Punkt in deinem XML-File ist die Schreibweise der Tags.
Die XML Notation der Tags ist case sensitive.
Aus diesem Grund sollten alle Tags entweder ++durchgängig ++ GROß oder klein geschrieben werden!

so far

Tokka

Was einmal war, wird nie wieder sein...

1.985 Beiträge seit 2004
vor 17 Jahren

Hallo Tokka,

ein kleiner Einwand von mir: Das Encoding-Attribut in der XML-Deklaration ist optional. Es kann genau so wie das standalone-Attribute weggelassen werden. Standard wäre in dem Fall dann UTF-8.

http://de.wikipedia.org/wiki/XML-Deklaration

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

T
108 Beiträge seit 2005
vor 17 Jahren

stimmt, da hast Du recht, mein Fehler!

Da hat die Macht der Gewohnheit zugeschlagen, denn bei uns in der Firma sind die Bestimmungen etwas härter....

Gruß
Tokka

Was einmal war, wird nie wieder sein...

SaberRider Themenstarter:in
112 Beiträge seit 2006
vor 17 Jahren

Danke für die Kritik 🙂

    • Lieber Fürst in der Hölle als Sklave im Himmel - 8)