Что нового

[Массивы] Преобразование XML в Массив

Trans

Знающий
Сообщения
257
Репутация
6
Ребят, помогите как нибудь по быстрому преобразовать данные из XML в массив
вот кусок кода из XML
Код:
<RECORD>
<name>Обители</name>
<class>fight</class>
<mob_status>mob</mob_status>
<min_lvl>28</min_lvl>
<max_lvl>44</max_lvl>
<mob_dmg></mob_dmg>
<mob_armor></mob_armor>
</RECORD>
<RECORD>
<name>Вампир</name>
<class>fight</class>
<mob_status>mob</mob_status>
<min_lvl>28</min_lvl>
<max_lvl>44</max_lvl>
<mob_dmg></mob_dmg>
<mob_armor></mob_armor>
</RECORD>
<RECORD>
есть вариант каждую строку искать отдельно и затем объединить в один массив, но это занимает много времени, а хотелось бы минимально снизить нагрузку и затрату времени
Код:
#include <_XMLDomWrapper.au3>
#include <Array.au3>

_XMLFileOpen ("mobs.xml")
$str = "//RECORD/name"
$Value = _XMLGetValue($str)
_ArrayDisplay($Value)
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Garrett
Ваш вариант подходит, но однако, всё в одной колонке, а надо чтоб в разных колонках было и не было пустых ячеек,
по сути там нужны не все строки, а только необходимые...
Но вот сервер выдаёт такой вариант, как указан в примере, что в первом посте
 

Naisho

Знающий
Сообщения
86
Репутация
12
Как то так...

Код:
#include <Array.au3>

$xmlFile_Path = FileOpenDialog("Load XML",@ScriptDir & "\","(*.xml)")
ConsoleWrite($xmlFile_Path&@CRLF)

$oXML = ObjCreate("Msxml2.DOMDocument.6.0")
$oXML.Load($xmlFile_Path)

$oXMLItems = $oXML.SelectNodes("root/RECORD")
If $oXML.ParseError.ErrorCode <> 0 Then MsgBox(4096+16,"Error","Ошибка парсинга файла" & @crlf & $oXML.ParseError.Reason )
ConsoleWrite($oXML.ParseError.Reason & @crlf)

$numberOfRecords = $oXMLItems.Length

Local $aXML[$numberOfRecords + 1][7]
$aXML[0][0] = $numberOfRecords

For $i = 0 To $numberOfRecords - 1
	$aXML[$i+1][0] = $oXMLItems.Item($i).selectSingleNode("name").Text
	$aXML[$i+1][1] = $oXMLItems.Item($i).selectSingleNode("class").Text
	$aXML[$i+1][2] = $oXMLItems.Item($i).selectSingleNode("mob_status").Text
	$aXML[$i+1][3] = $oXMLItems.Item($i).selectSingleNode("min_lvl").Text
	$aXML[$i+1][4] = $oXMLItems.Item($i).selectSingleNode("max_lvl").Text
	$aXML[$i+1][5] = $oXMLItems.Item($i).selectSingleNode("mob_dmg").Text
	$aXML[$i+1][6] = $oXMLItems.Item($i).selectSingleNode("mob_armor").Text
Next
_ArrayDisplay($aXML)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <_XMLDomWrapper.au3>
#include <Array.au3>

_XMLFileOpen ("mobs.xml")
$aValues = _XMLGetValue("//record/*[position() <= 3]")

Local $aData[Ceiling(UBound($aValues)/3)][3], $x = 0, $y = 0

$aData[0][0] = ($aValues[0]/3)

For $i = 1 To $aValues[0]
	
	If $y = 0 Then  $x += 1

	If Mod($i, 3) Then 
		$aData[$x][$y] = $aValues[$i]
		$y += 1
	Else
		$aData[$x][$y] = $aValues[$i]
		$y = 0
	EndIf
Next
_ArrayDisplay($aData)
 
Верх