c# - 使用 XmlDocument 操作 SSIS 包

标签 c# ssis xmldocument

我正在将 SSIS 包从 2014 年降级到 2012 年。此过程需要进行一些搜索/替换,我知道手动执行此操作。 现在我正在尝试编写一个 C# 程序来完成这项工作。

这是 .DTSX 文件中的 XML。

<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts"
  DTS:refId="Package"
  DTS:CreationDate="8/10/2016 11:39:29 AM"
  DTS:CreationName="Microsoft.Package"
  DTS:CreatorComputerName="FD89D67CEC21F"
  DTS:CreatorName="CORP\ZKHEKRZ"
  DTS:DTSID="{63B7F2FE-2D47-4710-82DF-83C92B7010B5}"
  DTS:ExecutableType="Microsoft.Package"
  DTS:LastModifiedProductVersion="12.0.4100.1"
  DTS:LocaleID="1033"
  DTS:ObjectName="CubeDailyBackup"
  DTS:PackageType="5"
  DTS:VersionBuild="131"
  DTS:VersionGUID="{8F0EAFC9-D73C-463C-8D5E-CB33C858D0D5}">
  <DTS:Property DTS:Name="PackageFormatVersion">8</DTS:Property>
  ....... more lines below 

第一步我需要更换

<DTS:Property DTS:Name="PackageFormatVersion">8</DTS:Property>

<DTS:Property DTS:Name="PackageFormatVersion">6</DTS:Property>

为了完成这项工作,我使用 XmlDocument 加载 .DTSX 文件,然后使用以下代码找到节点

private XmlDocument Pkg14 = new XmlDocument();
Pkg14.Load("mypackage.dtsx");
XmlNodeList xnList = Pkg14.SelectNodes("//DTS:Property[@DTS:Name='PackageFormatVersion']");

执行第三行抛出以下错误:

Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function

请指教。

编辑:

我尝试在 Pkg14.SelectNodex 之前添加以下代码,但没有帮助:

    XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(Pkg14.NameTable);
    xmlnsManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
    xmlnsManager.AddNamespace("DTS", "www.microsoft.com/sqlserver/dts/tasks/webservicetask");
    ..... and adding more namespace

最佳答案

确保将正确的 URL 映射到前缀(代码中的 DTS 前缀映射到与 XML 中不同的 URI)。还要确保将 XmlNamespaceManager 与 XPath 查询一起传递给 SelectNodes()SelectSingleNode() 方法:

Pkg14.Load("mypackage.dtsx");

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(Pkg14.NameTable);
xmlnsManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
xmlnsManager.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts");

XmlNode node = Pkg14.SelectSingleNode("//DTS:Property[@DTS:Name='PackageFormatVersion']", xmlnsManager);
node.InnerText = "6";

//save the modified XmlDocument back to file
Pkg14.Save("mypackage.dtsx");

dotnetfiddle demo

关于c# - 使用 XmlDocument 操作 SSIS 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279082/

相关文章:

sql - SSIS错误代码描述长度

c# - 用于读取 SSIS 项目参数的 BimlScript C# 代码块

c# - 为什么我的 XmlDocument.Save() 失败并返回 "Resource in use by another process"?

c# - XmlWriterSettings、XmlTextWriter、XmlWriter 不格式化输出?!没有换行,没有缩进

sql - SSIS 和外键

c# - 如何删除 XMLDocument 中的特定属性?

c# - 我如何通知容器对象一个属性已经从被改变的对象中改变了?

c# - 如何将 DataRow 转换为对象

c# - 为什么 WPF ComboBox 不能正确反射(reflect)绑定(bind)值?

c# - 如何在表中添加多行?