[Gelöst] XML-Datei mit Namespace importieren

Bild Microsoft Dynamics NAV 2016

[Gelöst] XML-Datei mit Namespace importieren

Beitragvon niehaves » 18. Mai 2018 09:28

Hallo zusammen,

ich bin neu hier und möchte gerne ein Problem schildern.
Es geht um den Import einer XML-Datei mit Namespace (unter Verwendung von DotNet-Variablen). Nachfolgend ist das Beispiel erläutert:

XML-Datei:
==========
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Nachricht xmlns="www.example.com">
   <Nachrichtenkopf>
   ...
   </Nachrichtenkopf>
   <Inhalt>
      <Betrag>12</Betrag>
      <Nummer>45</Nummer>
   </Inhalt>
   <Inhalt>
      <Betrag>67</Betrag>
      <Nummer>89</Nummer>
   </Inhalt>
</Nachricht>


C/AL-Variablen:
==============
Code: Alles auswählen
lXMLDOMDocument         DotNet      System.Xml.XmlDocument - System.Xml
lXMLNameSpaceManager    DotNet      System.Xml.XmlNamespaceManager - System.Xml
lCurrNode               DotNet      System.Xml.XmlNode - System.Xml
lNodeListElement        DotNet      System.Xml.XmlNode - System.Xml
lXMLNodeList            DotNet      System.Xml.XmlNodeList - System.Xml
lNamespace              Text
lNamespaceURI           Text
lServerFilePath         Text
lCounter                Integer


C/AL-Code:
==========
Code: Alles auswählen
lXMLDOMDocument := lXMLDOMDocument.XmlDocument();
lXMLDOMDocument.Load(lServerFilePath);

lXMLNameSpaceManager := lXMLNameSpaceManager.XmlNamespaceManager(lXMLDOMDocument.NameTable);
lNamespaceURI := lXMLDOMDocument.DocumentElement.NamespaceURI;
IF lNamespaceURI <> '' THEN BEGIN
  lNamespace := 'xf:';
  lXMLNameSpaceManager.AddNamespace('xf',lNamespaceURI);
END ELSE
  lNamespace := '';
 
lXMLNodeList := lXMLDOMDocument.GetElementsByTagName('Inhalt');

IF lXMLNodeList.Count() > 0 THEN BEGIN
  REPEAT 
    lNodeListElement := lXMLNodeList.Item(lCounter);
    lCurrNode := lNodeListElement.SelectSingleNode('//' + lNamespace + 'Nummer',lXMLNameSpaceManager);
    MESSAGE(lCurrNode.InnerText);
    lCounter += 1;
  UNTIL lCounter >= lXMLNodeList.Count();
END;


Es werden, wie gewünscht, zwei Message-Boxen geöffnet, nur leider jedesmal mit dem Wert "45". Erwartet hätte ich zuerst den Wert "45" und dann den Wert "89".
Was habe ich ĂĽbersehen, damit es wie gewĂĽnscht funktioniert? Kann mir jemand helfen?
Zuletzt geändert von niehaves am 18. Mai 2018 11:09, insgesamt 7-mal geändert.
niehaves
 
Beiträge: 12
Registriert: 18. Mai 2018 08:58
Wohnort: MĂĽnchen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: Business Central

Re: XML-Datei mit Namespace importieren

Beitragvon Kowa » 18. Mai 2018 10:11

Hallo niehaves,

dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.

Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufĂĽgen. Beispiel:


[code]Dein Quelltext[/code]

GruĂź, Kowa
MSDynamics.de-Team


P.S. Herzlich willkommen im Forum!
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7849
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: XML-Datei mit Namespace importieren

Beitragvon niehaves » 18. Mai 2018 10:23

Danke fĂĽr den Hinweis und den WillkommensgruĂź. Ich habe den Code nun entsprechend markiert.
niehaves
 
Beiträge: 12
Registriert: 18. Mai 2018 08:58
Wohnort: MĂĽnchen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: Business Central

Re: XML-Datei mit Namespace importieren

Beitragvon Ermac » 18. Mai 2018 10:56

Hallo,
der Fehler liegt hier:
Code: Alles auswählen
lCurrNode := lNodeListElement.SelectSingleNode('//' + lNamespace + 'Nummer',lXMLNameSpaceManager);


Du gehst immer vom Root aus (//) und die erste Node ist immer die mit dem Wert 45.

Probier es mal so
Code: Alles auswählen
lCurrNode := lNodeListElement.SelectSingleNode('./' + lNamespace + 'Nummer',lXMLNameSpaceManager);


GruĂź
Christoph
Ermac
 
Beiträge: 33
Registriert: 29. Juni 2016 11:42
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: XML-Datei mit Namespace importieren

Beitragvon niehaves » 18. Mai 2018 11:07

Hallo Christoph,

danke fĂĽr Deinen Vorschlag. Ich habe es probiert und es funktioniert jetzt. Klasse. Besten Dank!!!

Beste GrĂĽĂźe
niehaves
 
Beiträge: 12
Registriert: 18. Mai 2018 08:58
Wohnort: MĂĽnchen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: Business Central


ZurĂĽck zu NAV 2016

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast