[Gelöst] Problem beim XMLPort

22. Juni 2007 12:57

Hallo zusammen!

Ich habe ein Probelm beim Aufruf der XML-Datei für den XMLPort. Wenn ich die Datei wie folgt Aufrufe, dann funktioniert alles wunderbar:

Code:
filenameTxt := 'C:\begleitschein.xml';
Datei.OPEN(filenameTxt);
Datei.CREATEINSTREAM(Instr);
......
importXMLFile(Instr,68000);
......


Wenn ich aber die Common Dialog Management - Codeunit zum initialisieren der filenameTxt wie folgt benutze:
Code:
filename := dialogManagement.OpenFile('XML-Datei importieren','',4,'XML-Dateien (*.xml)|*.xml',0);
Datei.OPEN(filenameTxt);
Datei.CREATEINSTREAM(Instr);
......
importXMLFile(Instr,68000);
......

importXMLFile(VAR InStr : InStream;XmlPortNo : Integer) ret : Boolean
{
TempXMLMessage."XML Request".CREATEOUTSTREAM(StreamMessageOut);
TempXMLMessage."XML Request".CREATEINSTREAM(StreamMessageIn);
IF ISCLEAR(XMLDoc1) THEN
  CREATE(XMLDoc1);
IF ISCLEAR(XMLDoc2) THEN
  CREATE(XMLDoc2);
XMLDoc1.load(InStr);
RemoveNamespace(XMLDoc1,XMLDoc2);
XMLDoc2.save(StreamMessageOut);  //Hier kracht's!!!!!!
ret := XMLPORT.IMPORT(XmlPortNo, StreamMessageIn);
TempXMLMessage."XML Request".CREATEINSTREAM(StreamMessageIn);
CLEAR(XMLDoc1);
CLEAR(XMLDoc2);
}


RemoveNamespace(XMLSourceDocument : Automation "'Microsoft XML, v4.0'.DOMDocument40";VAR XMLDestinationDocument : Automation "'Microsof
{
IF ISCLEAR(XMLDestinationDocument) THEN
  CREATE(XMLDestinationDocument);
TempXMLMessage."XML Request".CREATEOUTSTREAM(StreamStylesheet1);
TempXMLMessage."XML Request".CREATEINSTREAM(StreamStylesheet2);
StreamStylesheet1.WRITETEXT('<?xml version="1.0" encoding="UTF-8"?>');
StreamStylesheet1.WRITETEXT('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">');
StreamStylesheet1.WRITETEXT('<xsl:output method="xml" encoding="UTF-8" />');
StreamStylesheet1.WRITETEXT('<xsl:template match="/">');
StreamStylesheet1.WRITETEXT('<xsl:copy>');
StreamStylesheet1.WRITETEXT('<xsl:apply-templates />');
StreamStylesheet1.WRITETEXT('</xsl:copy>');
StreamStylesheet1.WRITETEXT('</xsl:template>');
StreamStylesheet1.WRITETEXT('<xsl:template match="*">');
StreamStylesheet1.WRITETEXT('<xsl:element name="{local-name()}">');
StreamStylesheet1.WRITETEXT('<xsl:apply-templates select="@* | node()" />');
StreamStylesheet1.WRITETEXT('</xsl:element>');
StreamStylesheet1.WRITETEXT('</xsl:template>');
StreamStylesheet1.WRITETEXT('<xsl:template match="@*">');
StreamStylesheet1.WRITETEXT('<xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>');
StreamStylesheet1.WRITETEXT('</xsl:template>');
StreamStylesheet1.WRITETEXT('<xsl:template match="text() | processing-instruction() | comment()">');
StreamStylesheet1.WRITETEXT('<xsl:copy />');
StreamStylesheet1.WRITETEXT('</xsl:template>');
StreamStylesheet1.WRITETEXT('</xsl:stylesheet>');
IF ISCLEAR(XMLStyleSheet) THEN
  CREATE(XMLStyleSheet);
XMLStyleSheet.load(StreamStylesheet2);
XMLSourceDocument.transformNodeToObject(XMLStyleSheet,XMLDestinationDocument);
CLEAR(XMLStyleSheet);
}


dann bekomme ich beim Aufruf von XMLDoc2.save(StreamMessageOut); eine Fehlermeldung:
Der Aufruf zum Member save ist fehlgeschlagen. msxml4.dll gab folgende Fehlermeldung zurück:
System does not support the specified encoding.


Ehrlich gesagt bin ich etwas sprachlos, denn die OpenFile(..)-Methode liefert nichts anderes als eine Text-Variable, die den gleichen text leifert als ob ich es einfach zuweisen würde. Sonst unterscheidet sich ja der Code nicht!?!?!?! :roll: :roll:[marq=right]
Zuletzt geändert von f.ritz am 22. Juni 2007 14:04, insgesamt 1-mal geändert.

22. Juni 2007 13:48

Es muss wohl einen Bug der "Microsoft XML, v4.0"-Automation-Variable geben, denn wenn ich "Microsoft XML, v6.0" benutze dann funktioniert alles wunderbar :lol: :lol: