SSIS XML任务中的XSLT转换,仅输出XML文档的某些节点
给定以下XML文档SSIS XML任务中的XSLT转换,仅输出XML文档的某些节点,xml,xslt,ssis,Xml,Xslt,Ssis,给定以下XML文档 <?xml version="1.0" encoding="UTF-8"?> <TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ns5="http://www.
<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase
xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"
xmlns:ns5="http://www.garmin.com/xmlschemas/ActivityGoals/v1"
xmlns:ns3="http://www.garmin.com/xmlschemas/ActivityExtension/v2"
xmlns:ns2="http://www.garmin.com/xmlschemas/UserProfile/v2"
xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.garmin.com/xmlschemas/ProfileExtension/v1">
<Activities>
<Activity Sport="Other">
<Id>2017-01-13T19:26:50.000Z</Id>
<Lap StartTime="2017-01-13T19:26:50.000Z">
<TotalTimeSeconds>600.0</TotalTimeSeconds>
<DistanceMeters>0.0</DistanceMeters>
<Calories>42</Calories>
<AverageHeartRateBpm>
<Value>89</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm>
<Value>100</Value>
</MaximumHeartRateBpm>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2017-01-13T19:26:50.000Z</Time>
<AltitudeMeters>-51.599998474121094</AltitudeMeters>
<HeartRateBpm>
<Value>84</Value>
</HeartRateBpm>
<Extensions>
<ns3:TPX/>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:51.000Z</Time>
<AltitudeMeters>-51.599998474121094</AltitudeMeters>
<HeartRateBpm>
<Value>84</Value>
</HeartRateBpm>
<Extensions>
<ns3:TPX/>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:54.000Z</Time>
<AltitudeMeters>-0.6000000238418579</AltitudeMeters>
<HeartRateBpm>
<Value>84</Value>
</HeartRateBpm>
<Extensions>
<ns3:TPX/>
</Extensions>
</Trackpoint>
</Track>
<Extensions>
<ns3:LX/>
</Extensions>
</Lap>
<Creator xsi:type="Device_t">
<Name>Garmin Forerunner 910XT</Name>
<UnitId>3881635667</UnitId>
<ProductID>1328</ProductID>
<Version>
<VersionMajor>3</VersionMajor>
<VersionMinor>20</VersionMinor>
<BuildMajor>0</BuildMajor>
<BuildMinor>0</BuildMinor>
</Version>
</Creator>
</Activity>
</Activities>
<Author xsi:type="Application_t">
<Name>Garmin Connect API</Name>
<Build>
<Version>
<VersionMajor>16</VersionMajor>
<VersionMinor>23</VersionMinor>
<BuildMajor>0</BuildMajor>
<BuildMinor>0</BuildMinor>
</Version>
</Build>
<LangID>en</LangID>
<PartNumber>006-D2449-00</PartNumber>
</Author>
</TrainingCenterDatabase>
2017-01-13T19:26:50.000Z
600
0
42
89
100
活跃的
手册
2017-01-13T19:26:50.000Z
-51.599998474121094
84
2017-01-13T19:26:51.000Z
-51.599998474121094
84
2017-01-13T19:26:54.000Z
-0.6000000238418579
84
加明先导910XT
3881635667
1328
3.
20
0
0
Garmin连接API
16
23
0
0
EN
006-D2449-00
以及下面的XSLT。(我一直在尝试各种不同的版本,但我甚至无法让它导出任何内容)
我正在竭尽全力只导出XML的某些节点
编辑。从XML中添加到名称空间中。
编辑在名称空间和别名中添加
我想要的是这个
<Trackpoint>
<Time>2017-01-13T19:26:54.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:54.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:27:54.000Z</Time>
<HeartRateBpm>85</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:28:54.000Z</Time>
<HeartRateBpm>90</HeartRateBpm>
</Trackpoint>
etc.
2017-01-13T19:26:54.000Z
84
2017-01-13T19:26:54.000Z
84
2017-01-13T19:27:54.000Z
85
2017-01-13T19:28:54.000Z
90
等
非常感谢您的帮助。您当前的尝试失败有两个原因:
”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2“
,而不是
”http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd“
as
您正在样式表中声明轨迹
元素的路径不正确-您错过了
Lap
步骤Track
元素的深度副本
但是,我怀疑这是您想要的结果,因为它将按原样复制—包括默认名称空间。为了得到不在名称空间中的结果,您需要创建新元素,而不是从源代码复制。试试看,例如:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gar="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
exclude-result-prefixes="gar">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/gar:TrainingCenterDatabase">
<Track>
<xsl:for-each select="gar:Activities/gar:Activity/gar:Lap/gar:Track/gar:Trackpoint">
<Trackpoint>
<Time>
<xsl:value-of select="gar:Time"/>
</Time>
<HeartRateBpm>
<xsl:value-of select="gar:HeartRateBpm/gar:Value"/>
</HeartRateBpm>
</Trackpoint>
</xsl:for-each>
</Track>
</xsl:template>
</xsl:stylesheet>
应用于输入示例,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<Track>
<Trackpoint>
<Time>2017-01-13T19:26:50.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:51.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:54.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
</Track>
2017-01-13T19:26:50.000Z
84
2017-01-13T19:26:51.000Z
84
2017-01-13T19:26:54.000Z
84
当前尝试失败的原因有两个:
”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2“
,而不是
”http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd“
as
您正在样式表中声明轨迹
元素的路径不正确-您错过了
Lap
步骤Track
元素的深度副本
但是,我怀疑这是您想要的结果,因为它将按原样复制—包括默认名称空间。为了得到不在名称空间中的结果,您需要创建新元素,而不是从源代码复制。试试看,例如:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gar="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
exclude-result-prefixes="gar">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/gar:TrainingCenterDatabase">
<Track>
<xsl:for-each select="gar:Activities/gar:Activity/gar:Lap/gar:Track/gar:Trackpoint">
<Trackpoint>
<Time>
<xsl:value-of select="gar:Time"/>
</Time>
<HeartRateBpm>
<xsl:value-of select="gar:HeartRateBpm/gar:Value"/>
</HeartRateBpm>
</Trackpoint>
</xsl:for-each>
</Track>
</xsl:template>
</xsl:stylesheet>
应用于输入示例,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<Track>
<Trackpoint>
<Time>2017-01-13T19:26:50.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:51.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
<Trackpoint>
<Time>2017-01-13T19:26:54.000Z</Time>
<HeartRateBpm>84</HeartRateBpm>
</Trackpoint>
</Track>
2017-01-13T19:26:50.000Z
84
2017-01-13T19:26:51.000Z
84
2017-01-13T19:26:54.000Z
84
看起来您在名称空间方面遇到了问题。答案可能会有所帮助。我用名称空间更新了XLST。当我在select的副本中使用“*”时,它会起作用。但是,任何时候我都要更改它以查找其他nada。您需要使用前缀-请参阅:注意,XML(以及随后的样式表)中的大多数命名空间声明都是未使用的,因此是多余的。-还要注意的是,您显示的输出不是格式良好的XML(没有单个根元素)?我加了前缀,什么也没加。感谢关于格式良好的xml的说明。一旦我让它实际导出一些东西,我就会解决这个问题:-)看起来您在名称空间方面遇到了问题。答案可能会有所帮助。我用名称空间更新了XLST。当我在select的副本中使用“*”时,它会起作用。但是,任何时候我都要更改它以查找其他nada。您需要使用前缀-请参阅:注意,XML(以及随后的样式表)中的大多数命名空间声明都是未使用的,因此是多余的。-还要注意的是,您显示的输出不是格式良好的XML(没有单个根元素)?我加了前缀,什么也没加。感谢关于格式良好的xml的说明。一旦我让它实际导出一些东西,我将修复它:-)