powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Если в XML нет заголовочной строчки - как без нее загрузить ?
4 сообщений из 4, страница 1 из 1
Если в XML нет заголовочной строчки - как без нее загрузить ?
    #34812581
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер !
Из буржуйского приложения идет поток файлов XML, которые надо импортировать в базу. Ни в одном из XML-лов нет первой строчки типа (не говоря уж о схеме) :

Код: plaintext
1.
<?xml version="1.0" encoding="Windows-1251"?>

А сразу:

Код: plaintext
1.
2.
3.
4.
5.
6.
<EasyFlux>
	<client>
		<code> 1 </code>
		<type> 1 </type>
		<name>ПРОБА</name>
... бла-бла-бла

Если этот заголовок руками подставить - все путем, и код типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
loXML = CREATEOBJECT("MSXML.DOMDocument")
loXML.validateOnParse = .t.
loXML.async = .f.
loXML.load("u:\news\easywin\c001509.xml")

IF loXML.parseError.errorCode =  0 
   lNodes = loXML.ChildNodes
   lEasyNode = lNodes.item( 1 )
   lClientNode = lEasyNode.ChildNodes.item( 0 )
   lBomNode = lEasyNode.ChildNodes.item( 1 )
   lQuoteNode = lEasyNode.ChildNodes.item( 2 )
... бла-бла-бла

дает желаемый результат.
А если заголовка нет, то можно, конечно, отслеживать ошибку по номеру, открывать новый временный текстовый файл, вставлять в него заголовочную строчку, а потом тело исходного XML-файла, и уже его загружать в DOM :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  iCode = loXML.parseError.errorCode
  IF iCode = - 1072896760  then
     * здесь вставлять заголовок
     fN = FCREATE("c:\tmp\temp.xml")
... бла-бла-бла
  else
     ?loXML.parseError.reason
  endif

А без такого изврата - можно ? Пробовал передавать параметры для объекта DOMDocument:

Код: plaintext
1.
loXML = CREATEOBJECT("MSXML.DOMDocument", "1.0", "Windows-1251")
ошибка та же - "В текстовом комментарии обнаружен недопустимый знак"
...
Рейтинг: 0 / 0
Если в XML нет заголовочной строчки - как без нее загрузить ?
    #34813210
АлексейО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предложенный вариант не кажется мне особым "извратом"
могу предложить другой "изврат":
разобрать файл "в ручную" (fgets)
из кусочков файла и вашей програмки разбора можно предположить очень фиксированую структуру - просто вычитываете определенные (по счету с начала файла строки), и извлекаете значения из строки между тегами <>
...
Рейтинг: 0 / 0
Если в XML нет заголовочной строчки - как без нее загрузить ?
    #34813338
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну также и клеим

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
LOCAL lcDefaultPath, lcFileMask, lcFileName, lcPackPath, lnFile, lnPackFile, lnSourceFile

text to lcHeader noshow pretext  7 
	<?xml version='1.0' encoding='WINDOWS-1251'?><Envelope xmlns='http://www.w3.org/2003/05/soap-envelope'><Header><MessageInfo xmlns='urn:cbr-ru:msg:props:v1.1'><To>uic: 4583001987 </To><From>uic: 4501002032 </From><MessageType> 1 </MessageType><Priority> 5 </Priority></MessageInfo></Header><Body><sen:SigEnvelope xmlns:sen="urn:cbr-ru:dsig:env:v1.1"><sen:SigContainer><dsig:MACValue xmlns:dsig="urn:cbr-ru:dsig:v1.1">AABGZwSvOWPFu48OdJwAEQEFAEA5qyWBwhVcMk2pp0z8CwwmlKUkrpJ1XPMoz8D5T6hwS7A5H3SV1RBFll/DShTHcQevmxdjy9OEEwNqadLGkXlWAAADCwAAAAEABQAAAGZTSU5G</dsig:MACValue></sen:SigContainer>
	<sen:Object>
endtext

text to lcFooter noshow pretext  7 
	</sen:Object></sen:SigEnvelope></Body></Envelope>
endtext

lcDefaultPath = '....\собранные\08\NK010805\'
lcPackPath = '......\111\pack\'
lcFileMask = '*'

if adir(laFiles, lcDefaultPath+lcFileMask)> 0 
	for lnFile= 1  to alen(laFiles, 1 )
		lcFileName = laFiles(lnFile, 1 )
		if lower(lcFileName)='1.esid'
		strtofile(lcHeader, lcPackPath + lcFileName)
		lcStr = filetostr(lcDefaultPath + lcFileName)
		lcStr =  strconv(lcStr,  13 )
		strtofile( lcStr , lcPackPath + lcFileName,  1 )
		strtofile( lcFooter, lcPackPath + lcFileName,  1 )
		? 'собрал ' + lcPackPath + lcFileName
		endif
	endfor
endif

...
Рейтинг: 0 / 0
Если в XML нет заголовочной строчки - как без нее загрузить ?
    #34813380
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
loXML = CREATEOBJECT("MSXML.DOMDocument")
loXML.validateOnParse = .t.
loXML.async = .f.
loXML.loadxml(filetostr("u:\news\easywin\c001509.xml"))

... бла-бла-бла
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Если в XML нет заголовочной строчки - как без нее загрузить ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]