C# XmlDocument SelectNodes
Ich habe ein xml-Dokument mit root-element zwei untergeordnete Elemente, 'Diagnose' und 'Ergebnisse'. Die 'Ergebnisse' - element hat dann eine beliebige Anzahl von Elementen mit dem Namen 'Ergebnis'
Wenn diese geladen ist, in ein XmlDocument-es ist leicht zu navigieren die Struktur und sehen, dass dies genau, wie die Dinge funktionieren. Ich kann schreiben Sie eine rekursive Funktion, die eine Auswahl aus all den "Ergebnis" - Elementen. Die XmlDocument.SelectNodes("//Ergebnisse") findet ein Knoten kein problem.
Jedoch
* XmlDocument.SelectNodes("//results/result") findet nichts.
* XmlDocument.SelectNodes("//result") findet nichts.
Ich habe mit einem co-worker, und er hatte Kummer mit Xpath in XmlDocument.SelectNodes. Jemand anderes dieses problem? Alle Lösungen?
XML-DATEI:
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="10" yahoo:created="2009-08-07T10:19:59Z" yahoo:lang="en-US" yahoo:updated="2009-08-07T10:19:59Z" yahoo:uri="http://query.yahooapis.com/v1/yql?q=select+*+from+search.news+where+query%3D%22Tanzania%22">
<diagnostics>
<publiclyCallable>true</publiclyCallable>
<url execution-time="47"><![CDATA[http://boss.yahooapis.com/ysearch/news/v1/Tanzania?format=xml&start=0&count=10]]></url>
<user-time>49</user-time>
<service-time>47</service-time>
<build-version>2579</build-version>
</diagnostics>
<results>
<result xmlns="http://www.inktomi.com/">
<abstract>Kakungulu Cup winners SC Villa face Tanzania’s Simba SC this afternoon at the National stadium in Dar es salaam. “We had a very tiresome journey. The road was so bad and the road blocks were so many. However, we finally reached but the boys were so tired,” said Kato.</abstract>
<clickurl>http://lrd.yahooapis.com/_ylc=X3oDMTQ4cXAxcnRoBF9TAzIwMjMxNTI3MDIEYXBwaWQDb0pfTWdwbklrWW5CMWhTZnFUZEd5TkouTXNxZlNMQmkEY2xpZW50A2Jvc3MEc2VydmljZQNCT1NTBHNsawN0aXRsZQRzcmNwdmlkA21VVGlta2dlQXUzeEYuM0xGQkQzR1pUU1FIS0dORXA4cUk4QUJJX1U-/SIG=12vhpskdd/**http%3A//www.monitor.co.ug/artman/publish/sports/SC_Villa_face_Simba_in_Tanzania_89289.shtml</clickurl>
<date>2009/08/07</date>
<language>english</language>
<source>The Monitor</source>
<sourceurl>http://www.monitor.co.ug/</sourceurl>
<time>20:22:32</time>
<title>SC Villa face Simba in Tanzania</title>
<url>http://www.monitor.co.ug/artman/publish/sports/SC_Villa_face_Simba_in_Tanzania_89289.shtml</url>
</result>
XPATH
doc.SelectNodes("//result") ergibt keine Treffer.
- Haben Sie ein Beispiel der xml-betroffenen? Ist es möglich, dass Ihre "Ergebnis" - Elemente sind eigentlich in einem anderen namespace, um die "Ergebnisse" Elemente? Gibt es irgendwelche qualifizierende Präfixe, die auf den Elementen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rob und Marc Antworten sind wahrscheinlich in die richtige Richtung gehen - XmlDocument + namespaces + XPath kann ein bisschen Schmerz.
Wenn du in der Lage bist, zu verwenden .NET 3.5, ich schlage vor, Sie verwenden von LINQ to XML statt. Das würde es wirklich einfach:
Grundsätzlich LINQ to XML ist eine hervorragende API in fast jeder Weise, so meine Erfahrung 🙂 (ich glaube, es gibt einige Funktionen fehlen, aber wenn Sie Zugriff haben .NET 3.5 ist es auf jeden Fall Wert zumindest versuchen.)
Es klingt für mich wie namespaces sind die Probleme; Sie müssen in der Regel nehmen Sie die Hilfe eines
XmlNamespaceManager
für diese, und die Verwendung eines alias in Abfragen, d.h.(wo
x
definiert ist, innsmgr
als alias zu den gegebenen namespace)