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 ...
答案 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)