#include <Array.au3>
#include <_XMLDomWrapper_.au3>
Global $GroupXML = _XMLFileOpen(@ScriptDir & '\test.xml')
Global $sRootX = 'ROOT'
Global $aChildsRoot[1] = [0]
GetRootXMLRecurs($sRootX, $aChildsRoot)
;_ArrayDisplay($aChildsRoot, 'ChildsRoot')
GetTextXML()
;Рекурсивная функция получения дочерних секций
Func GetRootXMLRecurs($sRoot, ByRef $_aChildsRoot)
Local $iNodeCount
Local $aChildsTmp
Dim $aName[1], $aValue[1]
Local $aChilds = _XMLGetChildNodes($sRoot)
If Not IsArray($aChilds) Then
;ConsoleWrite('Не удалось считать секцию ' & $sRoot & " error = " & @error & @CRLF)
Return SetError(1, 0, -1)
EndIf
;_ArrayDisplay($aChilds, 'Childs')
For $i = 1 To $aChilds[0]
$aChilds[$i] = $sRoot & '/' & $aChilds[$i]
GetRootXMLRecurs($aChilds[$i], $_aChildsRoot)
If @error Then
;Если секция не пустая
;ConsoleWrite($aChilds[$i] & @CRLF)
$aChildsTmp = _XMLGetAllAttrib($aChilds[$i] & "[" & $i & "]", $aName, $aValue)
If Not @error Then
;_ArrayDisplay($aChildsTmp, $aChilds[$i] & " " & $i)
$_aChildsRoot[0] += 1
ReDim $_aChildsRoot[$_aChildsRoot[0] + 1]
$_aChildsRoot[$_aChildsRoot[0]] = $sRoot
ExitLoop
EndIf
EndIf
Next
EndFunc ;==>GetRootXMLRecurs
Func GetTextXML()
Local $iCheck
Dim $aFileName[1] = [0]
Dim $aChilds
Dim $aAttribs
Dim $aName[1], $aValue[1]
For $iR = 1 To $aChildsRoot[0]
$aChilds = _XMLGetChildText($aChildsRoot[$iR])
If @error Then
ContinueLoop; Если секция пустая
EndIf
;_ArrayDisplay($aChilds, $aChildsRoot[$iR])
;---------------------Поиск FileName------------------------------------
For $iC = 1 To $aChilds[0]
ConsoleWrite($iC - 1 & " " & $aChildsRoot[$iR] & '/' & $aChilds[$iC] & @CRLF)
;$aAttribs = _XMLGetAllAttribIndex($aChildsRoot[$iR] & '/' & $aChilds[$iC], $aName, $aValue, "", $iC - 1)
$aAttribs = _XMLGetAllAttrib($aChildsRoot[$iR] & '/' & $aChilds[$iC] & "[" & $iC & "]", $aName, $aValue)
If @error Then
ContinueLoop
EndIf
;_ArrayDisplay($aAttribs, 'Attribs')
$iCheck = -1
;Обще количество колонок.
For $iA = 1 To $aAttribs[0][0]
;Поиск нужного параметра
If StringCompare("FileName", $aAttribs[0][$iA]) = 0 Then
$iCheck = $iA
ExitLoop
EndIf
Next
If $iCheck < 0 Then
ContinueLoop
EndIf
;Записать имя файла в массив
$aFileName[0] += 1
ReDim $aFileName[$aFileName[0] + 1]
$aFileName[$aFileName[0]] = $aAttribs[1][$iCheck]
Next
Next
_ArrayDisplay($aFileName, 'FileName')
EndFunc ;==>GetTextXML