16.06.2008, 12:08 | #1 |
SAP
|
Read XML file
Помогите поменять кодировку.
Как перед начадом чтения XML файла указать ему какую кодировку использовать? X++: doc = new XmlDocument(); // ни знаю как но тут как то надо указать кодировку, подскажите куда копать doc.load(sourceFileName); |
|
16.06.2008, 13:04 | #2 |
Участник
|
кодировка вроде-как указывается в первом теге самого файла
|
|
16.06.2008, 13:06 | #3 |
Боец
|
Не знаю как XmlDocument, но есть класс TextBuffer работающий в том числе с файлами. В качестве параметра при открытии (и при сохранении) файла указывается его кодировка. Т.е. быть может можно открыть XML файл с помощью этого класса и подсунуть его в виде текста в XmlDocument
|
|
|
За это сообщение автора поблагодарили: konopello (2). |
16.06.2008, 13:15 | #4 |
SAP
|
Цитата:
кодировка вроде-как указывается в первом теге самого файла
Цитата:
Не знаю как XmlDocument, но есть класс TextBuffer работающий в том числе с файлами. В качестве параметра при открытии (и при сохранении) файла указывается его кодировка. Т.е. быть может можно открыть XML файл с помощью этого класса и подсунуть его в виде текста в XmlDocument
|
|
16.06.2008, 16:01 | #5 |
SAP
|
Всем спасибо, проблему решил
X++: static str OEMToCharBuff(str _strSource) { DLL winApiDLL = new DLL('USER32'); DLLFunction OEMToChar = new DLLFunction(winApiDLL, 'OemToCharA'); Binary bSource = new Binary(_strSource); str oemstr; ; OEMToChar.returns(ExtTypes::DWORD); OEMToChar.arg(ExtTypes::POINTER, ExtTypes::POINTER); OEMToChar.call(bSource, bSource); oemstr = bSource.string(0); return oemstr; } X++: static void A000088_WorkXML(Args _args) { TextBuffer textBuffer; XmlDocument xmlDoc; XMLNodeList tests; XMLNode node; XMLParseError error; XmlProcessingInstruction xmlProcessingInstruction; FileIOPermission sourceFileReadPerm; Filename sourceFileName = 'C:\\Tmp\\101.xml'; #define.read('R') #define.write('W') ; // Assert permission to use XML save sourceFileReadPerm = new FileIOPermission(sourceFileName, #read); sourceFileReadPerm.assert(); textBuffer = new TextBuffer(); textBuffer.fromFile(sourceFileName); textBuffer.setText(WinApi::OEMToCharBuff(textBuffer.getText())); // А ВОТ И ПЕРЕВОД xmlDoc = new XmlDocument(); if (!xmlDoc.loadXML(textBuffer.getText())) { error = xmlDoc.parseError(); info("Error during load of XML: " + error.reason() + " in line " + int2str(error.line())); return; } tests = xmlDoc.selectNodes('//Statements'); node = tests.nextNode(); while (node) { info(node.selectSingleNode('Date').text()); info(node.selectSingleNode('Account').text()); node = tests.nextNode(); } } |
|
16.06.2008, 16:38 | #6 |
Участник
|
вообще насколько я помню, если кодировка не указана, считается что файл обладает кодировкой UTF-8. То есть файл в кодировке OEM без указания таковой не является строго говоря XMLом
|
|
16.06.2008, 16:42 | #7 |
SAP
|
Цитата:
вообще насколько я помню, если кодировка не указана, считается что файл обладает кодировкой UTF-8.
PHP код:
|
|
16.06.2008, 17:27 | #8 |
Участник
|
А какая версия? У меня вот такой скрипт работает в 4 и 5
X++: static void Job1(Args _args) { ; info(XMLDocument::newFile(@"c:\0\tes866.xml").xml()); } |
|
17.06.2008, 09:54 | #9 |
SAP
|
Цитата:
А какая версия? У меня вот такой скрипт работает в 4 и 5
Я уже все перепробовал, получилось реализовать только как я описал выше. Если интересно могу скинуть файлик который необходимо читать. |
|
17.06.2008, 10:23 | #10 |
Участник
|
давай
|
|
17.06.2008, 10:54 | #11 |
SAP
|
А вот и файлик 001.rar
|
|
Теги |
xml, ax4.0 |
|
|