使用XML解析器从DTSX文件中获取XML元素值

时间:2017-04-27 21:00:28

标签: c# vb.net ssis xml-parsing

dtsx(SSIS包文件)是一个Xml文件。它包含一个名为PackageFormatVersion的元素(哪个版本的SSDT与此软件包相关)

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

我编写了一个Vb.net脚本,使用RegEx使用以下表达式检索此元素值(并且它工作正常)

  Dim strA As String = Regex.Match(strContent, "(?<=""PackageFormatVersion"">)(.*)(?=</DTS:Property>)", RegexOptions.Singleline).Value

但我认为推荐的实现方法是使用XML Parser,这是我不知道如何实现它的方式。任何帮助?

我接受C#中的答案

包Xml看起来像:

<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts"
 DTS:refId="Package"
 DTS:CreationDate="3/26/2017 11:44:38 PM"
 DTS:CreationName="Microsoft.Package"
 DTS:CreatorComputerName="MyComputer"
 DTS:CreatorName="MyComputer\Admin"
 DTS:DTSID="{384605BC-FC77-4506-B409-C1EE9B21BAE2}"
 DTS:ExecutableType="Microsoft.Package"
 DTS:LastModifiedProductVersion="13.0.4001.0"
 DTS:LocaleID="1033"
 DTS:ObjectName="Package"
 DTS:PackageType="5"
 DTS:VersionBuild="2"
 DTS:VersionGUID="{66D08BFA-6426-4123-99F7-6E655B79AF6D}">
 <DTS:Property
 DTS:Name="PackageFormatVersion">8</DTS:Property>
 <DTS:ConnectionManagers>
 <DTS:ConnectionManager ...

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案

Dim strA As String = ""

Dim xml = XDocument.Load(strFile)

Dim ns As XNamespace = "www.microsoft.com/SqlServer/Dts"
Dim man As XmlNamespaceManager = New XmlNamespaceManager(New NameTable())
man.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")

If Not xml.Root Is Nothing AndAlso
   Not xml.Root.Descendants(ns + "Property").Attributes(ns + "Name") Is Nothing AndAlso
   xml.Root.Descendants(ns + "Property").Attributes(ns + "Name").Where(Function(x) x.Value = "PackageFormatVersion").Count > 0 Then

   strA = xml.Root.Descendants(ns + "Property").Attributes(ns + "Name").Where(Function(x) x.Value = "PackageFormatVersion").FirstOrDefault.Parent.Value


End If

Msgbox(strA)

我从这个问题开始Parse SSIS .xml source to retrieve table mappings