【发布时间】:2017-04-27 21:00:27
【问题描述】:
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 ...
【问题讨论】:
-
为什么使用 XML 解析器是“推荐的方式”?我喜欢你所做的。正则表达式快速、直接,并且不需要对完整 XML 文档的嵌套结构进行详细解析。如果您采用 XML Parser 方式,您会将自己绑定到 DTS 包的近乎精确的模式(可以从一个版本更改为另一个版本)。虽然您所追求的属性当前确实存在于顶级节点中,但正则表达式仍然可能是一种更精简、更快的方法。牢记您的实际需求,让这些需求的最佳解决方案胜出。 我的意见>
-
@ryancdotnet 正则表达式将失败,如果一个新的属性被添加到元素,或者如果一个空格,换行被添加。虽然 xml 解析器可以通过名称搜索特定标签。然后得到它的价值。此外,正则表达式可能会失败,ssis 包含一个名为
PackageFormatVersion的变量(用户可能不知道此属性并将此名称用作变量)。另外我认为,当它完全是关于结构良好的数据时,正则表达式不是推荐的方式。
标签: c# vb.net ssis xml-parsing etl