【问题标题】:Powershell script for XML comparision用于 XML 比较的 Powershell 脚本
【发布时间】:2015-07-07 15:53:23
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: powershell-4.0


    【解决方案1】:

    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 文件。

    【讨论】:

    • 感谢您的回复 Lithis。第一次在 Windows 上工作。你能告诉我这个工具是用什么语言写的吗?可以直接在powershell脚本中使用吗?
    • @Vijay XML Diff 库是一个已编译的 .NET 库。 GUI 工具是用 C# 编写的。您可能可以从 Powershell 使用它,但我还没有尝试过。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多