我尝试导入一个xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<BedrijfsInformatie xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bedrijfsnaam>TotaalTechniek Europort bv</Bedrijfsnaam>
<Naam>E.W. Messemaker</Naam>
<Adres>Deltageul 71</Adres>
<Postcode>3251 NG</Postcode>
<Plaats>Stellendam</Plaats>
<Emailadres>edwin@tt-europort.eu</Emailadres>
<Telefoon>0187-499536</Telefoon>
<Rechtsvorm>Besloten Vennootschap</Rechtsvorm>
<Kvk>62.12.963.5</Kvk>
<BTW>Nl.8546.72.011.B01</BTW>
<Werkadres />
<Levering />
<IBAN />
<Swift />
<Betalingswijze>rekening</Betalingswijze>
<Verzamelfactuur>nee</Verzamelfactuur>
<Digitalefactuur>ja</Digitalefactuur>
<EmailDigitalefactuur>info@tt-europort.eu</EmailDigitalefactuur>
<Contactpersonen>
<Contactpersoon>
<Voornaam>Edwin</Voornaam>
<Achternaam>Messemaker</Achternaam>
<Emailadres>edwin@tt-europort.eu</Emailadres>
<Telefoon>0187-499536</Telefoon>
<Functie>DGA</Functie>
<Monteur />
<CanOrder>Ja</CanOrder>
<CanSeeStock>Ja</CanSeeStock>
<CanSeeOrder>Ja</CanSeeOrder>
<CanAddAddress>Ja</CanAddAddress>
<CanSeePrice>Ja</CanSeePrice>
<CanSeeCredit>Ja</CanSeeCredit>
<CanSeePickup>Ja</CanSeePickup>
</Contactpersoon>
<Contactpersoon>
<Voornaam>Gijs</Voornaam>
<Achternaam>Alphen, van</Achternaam>
<Emailadres>gijs@tt-europort.eu</Emailadres>
<Telefoon>0651971605</Telefoon>
<Functie>DGA</Functie>
<Monteur />
<CanOrder>Ja</CanOrder>
<CanSeeStock>Ja</CanSeeStock>
<CanSeeOrder>Ja</CanSeeOrder>
<CanAddAddress>Ja</CanAddAddress>
<CanSeePrice>Ja</CanSeePrice>
<CanSeeCredit>Ja</CanSeeCredit>
<CanSeePickup>Nee</CanSeePickup>
</Contactpersoon>
</Contactpersonen>
</BedrijfsInformatie>
但如果我进行导入,我会收到错误:
Attribuut wordt niet verwacht。所以第二行:
<BedrijfsInformatie xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
NAv不接受。但如果我这样做:
<BedrijfsInformatie>
它有效。但我不能这样做。因为文件必须阅读他的所有内容。
谢谢
是的,使用XML端口,这是xml端口的代码:
Documentation()
OnInitXMLport()
OnPreXMLport()
OnPostXMLport()
BedrijfsInformatie - Import::OnAfterInitRecord()
BedrijfsInformatie - Import::OnBeforeInsertRecord()
BedrijfsInformatie - Import::OnAfterInsertRecord()
BedrijfsInformatie - Export::OnPreXMLItem()
BedrijfsInformatie - Export::OnAfterGetRecord()
Bedrijfsnaam - Import::OnAfterAssignField()
Bedrijfsnaam - Export::OnBeforePassField()
Naam - Import::OnAfterAssignVariable()
Naam - Export::OnBeforePassVariable()
Adres - Import::OnAfterAssignVariable()
Adres - Export::OnBeforePassVariable()
Postcode - Import::OnAfterAssignVariable()
Postcode - Export::OnBeforePassVariable()
Plaats - Import::OnAfterAssignVariable()
Plaats - Export::OnBeforePassVariable()
Emailadres - Import::OnAfterAssignVariable()
Emailadres - Export::OnBeforePassVariable()
Telefoon - Import::OnAfterAssignVariable()
Telefoon - Export::OnBeforePassVariable()
Rechtsvorm - Import::OnAfterAssignVariable()
Rechtsvorm - Export::OnBeforePassVariable()
Kvk - Import::OnAfterAssignVariable()
Kvk - Export::OnBeforePassVariable()
BTW - Import::OnAfterAssignVariable()
BTW - Export::OnBeforePassVariable()
Werkadres - Import::OnAfterAssignVariable()
IF Werkadres = 'verplicht' THEN
"<Customer>"."Reference Mandatory" := TRUE
ELSE
"<Customer>"."Reference Mandatory" := FALSE;
Werkadres - Export::OnBeforePassVariable()
Levering - Import::OnAfterAssignVariable()
IF Werkadres = 'verplicht' THEN
"<Customer>"."Job Receipt No. Mandatory" := TRUE
ELSE
"<Customer>"."Job Receipt No. Mandatory" := FALSE;
Levering - Export::OnBeforePassVariable()
IBAN - Import::OnAfterAssignVariable()
IBAN - Export::OnBeforePassVariable()
Swift - Import::OnAfterAssignVariable()
Swift - Export::OnBeforePassVariable()
Betalingswijze - Import::OnAfterAssignVariable()
//Determines which payment method is choosen(rekening, Kontant,automatische incasso in the xml file)
CASE Betalingswijze OF
'kontant':
TemplateHeader.Code :='KNT-KLANT';
'rekening':
TemplateHeader.Code :='REK-KLANT';
'automatische incasso':
TemplateHeader.Code :='BIN-INC-KL';
ELSE
TemplateHeader.Code :='KONTANT';
END;
Betalingswijze - Export::OnBeforePassVariable()
Verzamelfactuur - Import::OnAfterAssignField()
Verzamelfactuur - Export::OnBeforePassField()
Digitalefactuur - Import::OnAfterAssignField()
Digitalefactuur - Export::OnBeforePassField()
EmailDigitalefactuur - Import::OnAfterAssignVariable()
EmailDigitalefactuur - Export::OnBeforePassVariable()
Contactpersonen - Import::OnAfterAssignVariable()
Contactpersonen - Export::OnBeforePassVariable()
Contactpersoon - Export::OnPreXMLItem()
Contactpersoon - Export::OnAfterGetRecord()
Contactpersoon - Import::OnAfterInitRecord()
Contactpersoon - Import::OnBeforeInsertRecord()
"<Contact>".Type := 1;//1 is for Person. 0 is for company
Contactpersoon - Import::OnAfterInsertRecord()
LoopCount := LoopCount + 1;
IF FirstContact = '' THEN
FirstContact := "<Contact>"."No.";
Voornaam - Export::OnBeforePassField()
Voornaam - Import::OnAfterAssignField()
Achternaam - Export::OnBeforePassField()
Achternaam - Import::OnAfterAssignField()
Emailadres - Export::OnBeforePassField()
Emailadres - Import::OnAfterAssignField()
Telefoon - Export::OnBeforePassField()
Telefoon - Import::OnAfterAssignField()
Functie - Export::OnBeforePassField()
Functie - Import::OnAfterAssignField()
Monteur - Export::OnBeforePassField()
Monteur - Import::OnAfterAssignField()
CanOrder - Export::OnBeforePassVariable()
CanOrder - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right1 := TRUE
ELSE
"<Contact>".Right1:= FALSE;
CanSeeStock - Export::OnBeforePassVariable()
CanSeeStock - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right2 := TRUE
ELSE
"<Contact>".Right2:= FALSE;
CanSeeOrder - Export::OnBeforePassVariable()
CanSeeOrder - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right3 := TRUE
ELSE
"<Contact>".Right3:= FALSE;
CanAddAddress - Export::OnBeforePassVariable()
CanAddAddress - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right4 := TRUE
ELSE
"<Contact>".Right4:= FALSE;
CanSeePrice - Export::OnBeforePassVariable()
CanSeePrice - Import::OnAfterAssignVariable()
IF CanSeePrice = 'Ja' THEN
"<Contact>".Right5 := TRUE
ELSE
"<Contact>".Right5:= FALSE;
CanSeeCredit - Export::OnBeforePassVariable()
CanSeeCredit - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right6 := TRUE
ELSE
"<Contact>".Right6:= FALSE;
CanSeePickup - Export::OnBeforePassVariable()
CanSeePickup - Import::OnAfterAssignVariable()
IF CanOrder = 'Ja' THEN
"<Contact>".Right7 := TRUE
ELSE
"<Contact>".Right7:= FALSE;
UpdateRecord()
这是导入代码:
Documentation()
Report - OnInitReport()
Report - OnPreReport()
Report - OnPostReport()
IF Filename <> '' THEN ImportFile
ELSE MESSAGE(NoFileText);
Report - OnCreateHyperlink(VAR URL : Text[1024])
Report - OnHyperlink(URL : Text[1024])
UploadFile(VAR FileName : Text[1024])
IF NOT ISSERVICETIER THEN
NewFileName := CommonDialogMgt.OpenFile(Caption,FileName,4,Filefilter,0)
ELSE
IF NOT(UPLOAD(Caption,'',Filefilter,FileName,NewFileName)) THEN
NewFileName := '';
IF NewFileName <> '' THEN
FileName := NewFileName;
ImportFile()
IF ISSERVICETIER THEN BEGIN
IF UPLOADINTOSTREAM(
'Select the simple.xml file',
'\\svdh04\data\NAV docs\webaanmelding\',
'XML File *.xml| *.xml',
Filename,
Stream) THEN
MESSAGE(ImportCompleteText)
ELSE
EXIT;
END
ELSE BEGIN
dFile.OPEN(Filename);
dFile.CREATEINSTREAM(Stream);
IF NOT XMLPORT.IMPORT(50010,Stream) THEN MESSAGE(ErrorText)
ELSE MESSAGE(ImportCompleteText);
END;
IF NOT ISSERVICETIER THEN dFile.CLOSE;
我现在就这样:
//New code:
dFile.TEXTMODE(FALSE);
dFile.OPEN(SavePath);
dFile.CREATEINSTREAM(Stream);
InputText.READ(Stream);
dFile.CLOSE;
TextToFind := 'xmlns=""';
TextPos := InputText.TEXTPOS(TextToFind);
WHILE TextPos <> 0 DO BEGIN
InputText.GETSUBTEXT(SubText, 1, TextPos - 1);
OutputText.ADDTEXT(SubText);
InputText.GETSUBTEXT(InputText, TextPos + STRLEN(TextToFind));
TextPos := InputText.TEXTPOS(TextToFind);
END;
OutputText.ADDTEXT(InputText);
dFile.TEXTMODE(FALSE);
dFile.CREATE(SavePath);
dFile.CREATEOUTSTREAM(NVOutStream);
OutputText.WRITE(NVOutStream);
dFile.CLOSE;
//End new code
IF ISSERVICETIER THEN BEGIN
IF UPLOADINTOSTREAM(
'Select the simple.xml file',
'\\svdh04\data\NAV docs\webaanmelding\',
'XML File *.xml| *.xml',
Filename,
Stream) THEN
MESSAGE(ImportCompleteText)
ELSE
EXIT;
END
ELSE BEGIN
dFile.OPEN(Filename);
dFile.CREATEINSTREAM(Stream);
IF NOT XMLPORT.IMPORT(50010,Stream) THEN MESSAGE(ErrorText)
ELSE MESSAGE(ImportCompleteText);
END;
IF NOT ISSERVICETIER THEN dFile.CLOSE;
但后来我收到了这个错误:
好吧,我现在改变了://New code:
dFile.TEXTMODE(FALSE);
dFile.OPEN(Filename);
dFile.CREATEINSTREAM(Stream);
InputText.READ(Stream);
dFile.CLOSE;
TextToFind := 'xmlns=""';
TextPos := InputText.TEXTPOS(TextToFind);
MESSAGE(FORMAT(TextPos));
WHILE TextPos <> 0 DO BEGIN
InputText.GETSUBTEXT(SubText, 1, TextPos - 1);
OutputText.ADDTEXT(SubText);
InputText.GETSUBTEXT(InputText, TextPos + STRLEN(TextToFind));
TextPos := InputText.TEXTPOS(TextToFind);
END;
OutputText.ADDTEXT(InputText);
dFile.TEXTMODE(FALSE);
dFile.CREATE(Filename);
dFile.CREATEOUTSTREAM(NVOutStream);
OutputText.WRITE(NVOutStream);
dFile.CLOSE;
//End new code
IF ISSERVICETIER THEN BEGIN
IF UPLOADINTOSTREAM(
'Select the simple.xml file',
'\\svdh04\data\NAV docs\webaanmelding\',
'XML File *.xml| *.xml',
Filename,
Stream) THEN
MESSAGE(ImportCompleteText)
ELSE
EXIT;
END
ELSE BEGIN
dFile.OPEN(Filename);
dFile.CREATEINSTREAM(Stream);
IF NOT XMLPORT.IMPORT(50010,Stream) THEN MESSAGE(ErrorText)
ELSE MESSAGE(ImportCompleteText);
END;
IF NOT ISSERVICETIER THEN dFile.CLOSE;
但问题在于:
TextPos := InputText.TEXTPOS(TextToFind);
TextPos为0。
谢谢
答案 0 :(得分:0)
是的,因为NAV 2009不支持XMLports中的命名空间。
解决方案在这里: You have to remove the namespace(s) first with an xml transformation
干杯!