Что нового

Из XML в txt

Burzum

Новичок
Сообщения
11
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: Необходимо из XML файла получить данные и поместить в TXT, все темы перечитал, но так и не смог осилить :(

Примечания:
Кусок XML
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
<uid>13306254</uid>
<uid>16362711</uid>
<uid>19234842</uid>
</response>

В такой вид:
13306254
16362711
19234842
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Burzum,
Так пойдет?
Код:
$sXML = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
		'<response list="true">' & @CRLF & _
		' <uid>13306254</uid>' & @CRLF & _
		' <uid>16362711</uid>' & @CRLF & _
		' <uid>19234842</uid>' & @CRLF & _
		'</response>'
ConsoleWrite($sXML & @LF)
ConsoleWrite('---' & @LF)
$sTxt = StringStripWS(StringRegExpReplace($sXML, '<.*?>', ''), 7)
ConsoleWrite($sTxt & @LF)
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
Это как я понимаю работа с самим текстом, а как это сделать с файлом? дело в том что мне приходят вот такие но большие файлы и нужно их переводить в текстовый документ и главное по строкам.

Если делать так:
Код:
$String = FileRead($hID & '.XML')
$RegExp = StringStripWS(StringRegExpReplace($String, '<.*?>', ''), 7)
FileWrite($hID & '.txt', $RegExp)

То все выгружается в одну строку :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Burzum [?]
все выгружается в одну строку
Вы показали кусок XML, я его обработал простейшим способом. Дайте пример файла, будем смотреть.
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
madmasles

Код:
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
 <uid>13306254</uid>
 <uid>16362711</uid>
 <uid>19234842</uid>
 <uid>22003665</uid>
 <uid>23913366</uid>
 <uid>27075581</uid>
 <uid>33333692</uid>
 <uid>43302122</uid>
 <uid>47397648</uid>
 <uid>47526038</uid>
 <uid>47755222</uid>
 <uid>54173049</uid>
 <uid>56648429</uid>
 <uid>58647541</uid>
 <uid>63711676</uid>
 <uid>67357154</uid>
 <uid>70050412</uid>
 <uid>78030342</uid>
 <uid>78953459</uid>
 <uid>82886139</uid>
 <uid>88027543</uid>
 <uid>91739839</uid>
 <uid>97621671</uid>
 <uid>98627971</uid>
 <uid>103641367</uid>
 <uid>106703218</uid>
 <uid>107645250</uid>
 <uid>107948669</uid>
 <uid>109268772</uid>
 <uid>111013912</uid>
 <uid>111363581</uid>
 <uid>111443394</uid>
 <uid>119769881</uid>
 <uid>121074116</uid>
 <uid>122664310</uid>
 <uid>123083683</uid>
 <uid>123278011</uid>
 <uid>124182175</uid>
 <uid>124684631</uid>
 <uid>126964335</uid>
 <uid>131134540</uid>
 <uid>131630267</uid>
 <uid>132824204</uid>
 <uid>133027021</uid>
 <uid>133100187</uid>
 <uid>133251242</uid>
 <uid>134204865</uid>
 <uid>134306614</uid>
 <uid>135552513</uid>
 <uid>137070705</uid>
 <uid>137141825</uid>
 <uid>137766523</uid>
 <uid>139018821</uid>
 <uid>139561533</uid>
 <uid>140186363</uid>
 <uid>142387789</uid>
 <uid>142688724</uid>
 <uid>144566784</uid>
 <uid>145495642</uid>
 <uid>146134769</uid>
 <uid>147207261</uid>
 <uid>147980690</uid>
 <uid>157492941</uid>
 <uid>157674526</uid>
 <uid>161158175</uid>
 <uid>163297991</uid>
 <uid>163389291</uid>
 <uid>166107959</uid>
 <uid>172285759</uid>
 <uid>175235284</uid>
 <uid>192014840</uid>
 <uid>193629847</uid>
 <uid>195653003</uid>
 <uid>197202082</uid>
 <uid>197777795</uid>
 <uid>200288896</uid>
 <uid>206471368</uid>
 <uid>207424298</uid>
 <uid>211754430</uid>
 <uid>212203103</uid>
 <uid>212845094</uid>
 <uid>216820124</uid>
 <uid>216929129</uid>
 <uid>226689340</uid>
 <uid>227187666</uid>
 <uid>229019453</uid>
 <uid>229183280</uid>
 <uid>236414136</uid>
 <uid>237797877</uid>
 <uid>239289304</uid>
 <uid>241327373</uid>
 <uid>251365362</uid>
</response>

Вот все что в файле XML
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Burzum
А так?
Код:
$sXML = FileRead(@ScriptDir & '\106682092.xml')
$sTxt = StringReplace(StringStripWS(StringRegExpReplace($sXML, '<.*?>', ''), 7), @CR, @CRLF)
ConsoleWrite($sTxt & @LF)
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
madmasles
Отлично, в консоль пишет столбиком! А как теперь это передать в файл?
Так не получается, в смысле снова пришит в строку.
Код:
FileWrite($hID & '.txt', $sTxt & @LF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Burzum [?]
А как теперь это передать в файл?
Код:
Local $sXML_File = @ScriptDir & '\106682092.xml', $sXML, $sTxt, $sTXT_File, $hFile

$sXML = FileRead($sXML_File)
$sTxt = StringReplace(StringStripWS(StringRegExpReplace($sXML, '<.*?>', ''), 7), @CR, @CRLF)
$sTXT_File = StringReplace($sXML_File, '.xml', '.txt')
$hFile = FileOpen($sTXT_File, 2)
FileWrite($hFile, $sTxt)
FileClose($hFile)
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
madmasles

Спасибо огроменное, то что надо!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вот ещё один способ:
Код:
Local $sXML_File = @ScriptDir & '\106682092.xml', $sXML, $sTxt, $sTXT_File, $hFile
Local $oNodes
Local $oXml = ObjCreate('MSXML2.DomDocument.3.0')
If Not IsObj($oXml) Then Exit 1

$sXML = FileRead($sXML_File)
$sTXT_File = StringReplace($sXML_File, '.xml', '.txt')
$hFile = FileOpen($sTXT_File, 2)
$oXml.async = 0
$oXml.loadXML($sXML)
If Not IsObj($oXml) Then Exit 2
$oNodes = $oXml.selectNodes('/response/uid')
If Not IsObj($oNodes) Then Exit 2
For $oNode In $oNodes
    $sTxt = $oNode.text
    FileWriteLine($hFile, $sTxt)
Next
FileClose($hFile)
 
Сообщения
50
Репутация
-1
Ваш скрипт записывает построчно, а как объеденить что бы в одну строку записывал?
 
Верх