Что нового

[Данные, строки] Ошибка при записи в xml - файл

konokrad666

Новичок
Сообщения
22
Репутация
0
Нужно записать данные в хмл файл.

Формат файла:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<notes version="1">
<note player=" popfla" label="7" update="1344804149"></note>
<note player=" RdAM89" label="10" update="1340555322"></note>
<note player=" Tcarnage" label="6" update="1359396086"></note>
<note player=" violsss" label="1" update="1369963910"></note>
</notes>

Мой код:

Код:
_XMLSetAttrib("/notes/note[@player='" & $nickname & "']", "update", $timestamp)
_XMLSetAttrib("/notes/note[@player='" & $nickname & "']", "label", $category_id)

Но, переменная $nickname может содержать некорректные символы, что приводит к ошибке XMLDomWrapper-а и крашу программы.

И, если я все правильно понял, перед записью нужно конвертировать ее содержимое в CDATA, как это сделать?

Либо каким то способом экранировать кавычки эти, чтобы все не разваливалось. Может быть с помощью регулярных выражений?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: [Данные, строки] Как конвертировать данные в переменной в CDATA?

Encoding UDF
 
Автор
K

konokrad666

Новичок
Сообщения
22
Репутация
0
Re: [Данные, строки] Как конвертировать данные в переменной в CDATA?

перекодировал переменную в UTF-8 получаю

/notes/note[@player=''-->Nabigator<--']
----> $IEComErrorSource = msxml6.dll
----> $IEComErrorHelpFile =
----> $IEComErrorHelpContext = 0
----> $IEComErrorLastDllError = 0

--> COM Error Encountered in pokerclipboard_0_2_1.au3
----> $IEComErrorScriptline = 601
----> $IEComErrorNumberHex = 000000A9
----> $IEComErrorNumber = 169
----> $IEComErrorWinDescription = Variable must be of type 'Object'.
----> $IEComErrorDescription = Необходимый токен ']' найден 'NAME'.

Перекодировал в Юникод, получаю

/notes/note[@player='\'-->Nabigator<--']
----> $IEComErrorSource = msxml6.dll
----> $IEComErrorHelpFile =
----> $IEComErrorHelpContext = 0
----> $IEComErrorLastDllError = 0

--> COM Error Encountered in pokerclipboard_0_2_1.au3
----> $IEComErrorScriptline = 600
----> $IEComErrorNumberHex = 80020009
----> $IEComErrorNumber = -2147352567
----> $IEComErrorWinDescription = Неопознанная ошибка
----> $IEComErrorDescription = Необходимый токен ']' найден '('
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
в Base64 кодируйте и записывайте как есть, то есть

Код:
SGVsbG8gV29ybGQ=

это "Hello World" в Base64
 
Автор
K

konokrad666

Новичок
Сообщения
22
Репутация
0
в итоге проблема решилась так:

Код:
Func XML_format($string_xml)
	$string_xml = StringReplace($string_xml, "'", "&apos;")
	$string_xml = StringReplace($string_xml, '"', "&quot;")
	$string_xml = StringReplace($string_xml, '&', "&amp;")
	$string_xml = StringReplace($string_xml, '>', "&gt;")
	$string_xml = StringReplace($string_xml, '<', "&lt;")
return $string_xml
EndFunc
 
Верх