Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


niverprof, ну, вот, если ничего не забыл — как-то так:
Скрытый текст
Код: Выделить весь код
$sSourceFile = "E:\Песочница\0417\archive_dbf.xml"

if(Test-Path -Path $sSourceFile -PathType "Leaf") {
    $oXML = [xml](Get-Content $sSourceFile)
    
    $oFieldNode = $oXML.SelectSingleNode("/DATAPACKET/METADATA/FIELDS/FIELD[@attrname='FRM_REFL']")
    $oPreviousFieldNode = $oFieldNode.PreviousSibling
    
    $oFieldNode.ParentNode.RemoveChild($oFieldNode) | Out-Null
    
    for($i = 400; $i -le 700; $i += 20) {
        $oPreviousFieldNode = $oPreviousFieldNode.ParentNode.InsertAfter($oXML.CreateNode([System.Xml.XmlNodeType]::Element, "FIELD", ""), $oPreviousFieldNode)
        
        $oPreviousFieldNode.Attributes.Append($oXML.CreateNode([System.Xml.XmlNodeType]::Attribute, "attrname", "")).Value  = "R_$i"
        $oPreviousFieldNode.Attributes.Append($oXML.CreateNode([System.Xml.XmlNodeType]::Attribute, "fieldtype", "")).Value = "string.uni"
        $oPreviousFieldNode.Attributes.Append($oXML.CreateNode([System.Xml.XmlNodeType]::Attribute, "WIDTH", "")).Value     = "256"
    }
    
    $oXML.DATAPACKET.ROWDATA.ROW |`
        ForEach-Object -Process {
            $oRowNode = $_
            $oAttributeNode = $oRowNode.GetAttributeNode("FRM_REFL")
            
            $oAttributeNode.Value -split ";" | Where-Object -FilterScript {$_ -ne ""} | `
                ForEach-Object -Begin {
                    $i = 400
                    $oPreviousAttributeNode = $oAttributeNode
                } -Process {
                    $oPreviousAttributeNode = $oRowNode.Attributes.InsertAfter($oXML.CreateNode([System.Xml.XmlNodeType]::Attribute, "R_$i", ""), $oPreviousAttributeNode)
                    $oPreviousAttributeNode.Value = $_
                    $i += 20
                }
            $oRowNode.RemoveAttributeNode($oAttributeNode) | Out-Null
        }
    
    Remove-Item -Path "$sSourceFile.bak" -Force -ErrorAction SilentlyContinue
    Rename-Item -Path $sSourceFile -NewName "$sSourceFile.bak"
    
    $oXML.save($sSourceFile)
} else {
    Write-Host "Can't find source xml file [$sSourceFile]." -ForegroundColor Red
}

Пробуйте. Проверок соответствия формата никаких.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:33, 22-12-2014 | #9