用于XML比较的Powershell脚本

时间:2015-07-07 15:53:24

标签: powershell-v4.0

我正在尝试使用PowerShell脚本将web.config文件从生产与非生产进行比较。我能够生成可以比较多达一个级别的代码,但除此之外我没有找到任何有关互联网的帮助来比较和更新具有多级深度节点结构的xml文件。下面是我的代码,它可以在文件的第一级工作,但不能超越。有没有什么方法可以比较两个文件和更新没有硬编码任何节点元素?下面是我的代码,它可以达到一个级别。

$src_web_config = "C:\Users\live\web.config"
$dst_web_config = "C:\Users\int\web.config"

# Creating XML objects for live and integration
$src_xml = New-Object -TypeName XML
$dst_xml = New-Object -TypeName XML
$src_xml.Load($src_web_config)
$dst_xml.Load($dst_web_config)

# get top nodes
$src_top_node = $src_xml.DocumentElement.Name
$dst_top_node = $dst_xml.DocumentElement.Name


function add_node($add_node)
{
    Write-Host "Node", $add_node.name, "doesn't exist"
    $node = $dst_xml.importnode($add_node, $true)
    $dst_xml.$dst_top_node.appendchild($node)
    $dst_xml.Save($dst_web_config)
}

if ($src_top_node -eq $dst_top_node)
{
    if ($src_xml.$src_top_node.HasChildNodes)
    {
        $src_xml.$src_top_node.ChildNodes | % {
            if ($dst_xml.$dst_top_node.ChildNodes.name -contains $_.name)
            {
                if ($_.haschildnodes)
                {
                    #nothing I can find                    
                }
            }
            else
            {  
                add_node($_)   
            }
        }
     }
}

此致 VJ

1 个答案:

答案 0 :(得分:0)

Microsoft有一个XML Diff and Patch Tool可以在.NET应用程序中使用。 Microsoft还提供了一个使用C#编写的示例GUI Tool。您可以从here下载GUI源代码安装程序。

我对使用Powershell的XML Diff库没有任何特别的建议。使用Powershell中的.NET库是另一个主题,但您可以在线查找有关它的信息。如果您没有致力于Powershell,也许您可​​以使用C#或VB.NET,就像在GUI工具中一样。如果您不需要编写自己的脚本来自动执行该过程,则可以根据需要使用其GUI工具来区分XML文件。