Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#1

[XML] XPath in XML-Dokument (mit XML-Namespace) greift nicht

  Alt 11. Sep 2006, 09:28
Hi,

folgendes Problem: Ich habe ein Infopath Dokument. Das sieht in etwa so aus:

XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.72" productVersion="12.0.0" PIVersion="1.0.0.0"
href="file:///C:\blaflasel\file.xml"
name="urn:schemas-microsoft-com:office:infopath:Document-Name:-myXSD-2006-02-09T21-22-41" ?>
<?mso-application progid="InfoPath.Document"?>
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-02-09T21:22:41"
xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="de">
   <my:edName>Sebastian Gingter</my:edName>
   <my:edJahr>2006</my:edJahr>
   <my:edMonat>09</my:edMonat>
   <my:edKW>36</my:edKW>
   <my:timeEntries>
      <my:timeEntry>
         <my:dtArbeitstag>2006-09-04</my:dtArbeitstag>
         <my:startTime>17:00:00</my:startTime>
         <my:endTime>18:00:00</my:endTime>
         <my:edAuftragsnummer>123456</my:edAuftragsnummer>
         <my:startBreakTime>17:15:00</my:startBreakTime>
         <my:endBreakTime>17:30:00</my:endBreakTime>
         <my:memoTaetigkeit>TEST</my:memoTaetigkeit>
         <my:lookIBN>X</my:lookIBN>
         <my:lookTaetigkeit>IT-SW</my:lookTaetigkeit>
         <my:totalHours>0.75</my:totalHours>
      </my:timeEntry>
      <my:timeEntry>
         <my:dtArbeitstag>2006-09-05</my:dtArbeitstag>
         <my:startTime xsi:nil="true"></my:startTime>
         <my:endTime xsi:nil="true"></my:endTime>
         <my:edAuftragsnummer></my:edAuftragsnummer>
         <my:startBreakTime xsi:nil="true"></my:startBreakTime>
         <my:endBreakTime xsi:nil="true"></my:endBreakTime>
         <my:memoTaetigkeit></my:memoTaetigkeit>
         <my:lookIBN></my:lookIBN>
         <my:lookTaetigkeit>IT-SW</my:lookTaetigkeit>
         <my:totalHours xsi:nil="true"></my:totalHours>
      </my:timeEntry>
                <my:grandTotal>0.75</my:grandTotal>
   </my:timeEntries>
</my:myFields>
(Ja, das ist für ne Mini-Zeiterfassung ).

Jedenfalls will ich in nun die mit Infopath erstellten XML-Files mit einem eigenen Programm auswerten. Dazu benutze ich stand jetzt folgenden Code:

Code:
XmlDataDocument xmldoc = new XmlDataDocument();
           
xmldoc.Load(fileName);
XmlNamespaceManager nsManager = new XmlNamespaceManager(xmldoc.NameTable);        
nsManager.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-04-20T16:26:21");
   
XmlNode name = xmldoc.SelectSingleNode("my:myFields/my:edName", nsManager);
if (name != null)
{
   String strName = name.ToString();
   System.Windows.Forms.MessageBox.Show(strName);
}
In Filename steht die Adresse zu einem entsprechenden File, das öffnen etc. tut auch.

Das Problem liegt in der Zeile: XmlNode name = xmldoc.SelectSingleNode("my:myFields/my:edName", nsManager);
Der XMLNode name ist danach leider Null, was er nicht sein sollte. In dem File sieht jeder, dass der Node existiert und da mein Name drin steht.

Den Code mit dem Namespace hinzufügen habe ich aus dem MSDN:
Hier direkt zu Infopath: (langer link)
Und hier der normale XPath-Eintrag: http://msdn2.microsoft.com/de-de/library/d6730bwt.aspx

Wieso tut die Namespace-auflösung nicht bzw. was genau muss ich tun, damit ich per XPath auf die Nodes zugreifen kann?

Aso: ich habe folgende Variationen schon probiert:
  • my:myFields/my:edName
  • /my:myFields/my:edName
  • my:edName
  • /my:edName
(Wobei Nummer 2 der XPath ist, den mir Infopath selber liefert und Nr. 1 der ist, der dem Codebeispiel aus dem MSDN folgt).

Aso.. Nachtrag: Ich benutze freilich .NET 2.0.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat