Entwickler-Ecke

IO, XML und Registry - XML-Attribut auswählen und verarbeiten (XPath ?)


D.Follmann - Mo 01.10.07 08:47
Titel: XML-Attribut auswählen und verarbeiten (XPath ?)
Hallo,
ich habe folgendes XML-Dokument:

XML-Daten
1:
2:
3:
4:
<?xml version="1.0" ?>
<FDT xmlns="x-schema:DTMCommunicationErrorSchema.xml"  xmlns:fdt="x-schema:FDTDataTypesSchema.xml">
  <fdt:CommunicationError communicationError="timeout" tag="myTag"/>
</FDT>


und daraus möchte ich jetzt den Text lesen, der hinter communicationError steht (also hier: "timeout"). Wie mache ich das am besten? Über XPath? Wenn ja, wie müsste die Abfrage aussehen?
Ich denke dass XPath schon sinnvoll wäre, da es auch wesentlich komplexere XML-Dateien gibt und man da anders wahrscheinlich kaum noch durch Navigieren kann.


UGrohne - Mo 01.10.07 10:18

Google mal nach einem XPath-Tutorial, ich glaube auf w3cschools gab es ein Gutes. Ansonsten müsste das in etwa so aussehen in C#:

C#-Quelltext
1:
2:
3:
4:
5:
XmlNamespaceManager nsmgr;
XmlDocument myDoc;
nsmgr = new XmlNamespaceManager(myDoc.NameTable);
nsmgr.AddNamespace("fdt",[Namespace-URI]);
XmlNode node = myDoc.SelectSingleNode("//fdt:communicationError[@communicationError]", nsmgr);

Ich bin mir gerade nicht sicher, ob mein XPath stimmt, weil ich Attribute damit bisher nicht direkt ausgelesen habe, aber so in etwa sollte es gehen. Einfach in dem Tutorial schauen ;)


D.Follmann - Mo 01.10.07 12:56

Danke für die Antwort, aber das funktioniert irgednwie alles nicht so wie ich will...
mal was anderes,vielleicht bringt mich das eher weiter:

Ich bin grade dabei mit Xpath zu experimentieren. Dazu habe ich folgende Seite als Hilfe genommen:XPath-Test [http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm?Red60urne=fe1aaa944c37dfeccc5c0cacfd3bbc54&context=%2F&xpath=%2FFDT%2Ffdt%3ACommunicationError%2F%40communicationError&eval=Evaluate]

es dreht sich um folgende XML-Datei:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
<?xml version="1.0"?>
<FDT xmlns="x-schema:DTMInformationSchema.xml" xmlns:fdt="x-schema:FDTDataTypesSchema.xml" >  
  <DtmInfo>
    <FDTVersion major="1" minor="2" release="1" build="1"/>               
    <!--hier stehen noch ein paar knoten, hab ich der Übersichtlichkeit wegen entfernt...>
  </DtmInfo>
</FDT>


Gebe ich nun im XPath-Tester Beispielsweise ein: /*/DtmInfo

Selektiert er mir natürlich den "DtmInfo"-Knoten.
Aber in C# bekomme ich bei gleicher XPath-Abfrage eine Leeere XmlNodeList zurück:

C#-Quelltext
1:
XmlNodeList nodes = xdoc.SelectNodes("/*/DtmInfo"); //xdoc ist das XmlDocument.                    



Warum ist die NodeList da denn leer?! ich versteh' das alles nicht...

Danke im vorraus!