用于XML输出的SSRS XSLT-将属性子集转换为元素
我在将属性子集转换为子元素时遇到了麻烦。我的目标是有一个样式表,SSRS可以在形成输出时参考。 我看到的示例代码转换了所有属性,我不知道如何选择。 这是源文件,作为XML文件从SSRS输出用于XML输出的SSRS XSLT-将属性子集转换为元素,xslt,Xslt,我在将属性子集转换为子元素时遇到了麻烦。我的目标是有一个样式表,SSRS可以在形成输出时参考。 我看到的示例代码转换了所有属性,我不知道如何选择。 这是源文件,作为XML文件从SSRS输出 <?xml version="1.0" encoding="utf-8"?> <Report xsi:schemaLocation="_x0031_4Q_CSV http://MySSRSServer/ReportServer?%2FTRR%20Reports%2F14Q_CSV&a
<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="_x0031_4Q_CSV http://MySSRSServer/ReportServer?%2FTRR%20Reports%2F14Q_CSV&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=uuurm045z4bsq2maejbbb045&rc%3ASchema=True" Name="14Q_CSV" textbox1="14Q_CSV Period:201711 Publish Date: 12/7/2017 4:38:49 PM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="_x0031_4Q_CSV">
<table1>
<Detail_Collection>
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260053" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCC8" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537467" CQSCP087="50768.00" CQSCP088="53330.00" CQSCP089="50667.00" CQSCP090="12484343.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.070363000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="105.2563040000" />
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260054" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCD6" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537468" CQSCP087="96069.00" CQSCP088="106433.00" CQSCP089="96069.00" CQSCP090="12066524.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.067115000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="110.7884470000" />
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260057" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCH7" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537472" CQSCP087="133804.00" CQSCP088="151158.00" CQSCP089="134964.00" CQSCP090="6415504.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.064967000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="111.9988700000" />
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260058" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCJ3" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537473" CQSCP087="188500.00" CQSCP088="198238.00" CQSCP089="186974.00" CQSCP090="7054878.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.074321000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="106.0240080000" />
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260059" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCK0" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537474" CQSCP087="53662.00" CQSCP088="56159.00" CQSCP089="52828.00" CQSCP090="6033726.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.079403000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="106.3062160000" />
<Detail ID_RSSD="1037003" D_DT="2017-11-30T00:00:00" CQSCS383="S0004260060" Transtype="I" CQSCF841="2020-01-23T00:00:00" CQSCP082="CUSIP" CQSCP083="31384YCL8" CQSCS370="N" CQSCP084="Agency MBS" CQSCP085="FN 537475" CQSCP087="53958.00" CQSCP088="57002.00" CQSCP089="53518.00" CQSCP090="5710436.00" CQSCP091="0.00" CQSCP092="AFS" CQSCP093="2017-11-30T00:00:00" CQSCP094="0.076705000000" CQSCP095="2000-04-01T00:00:00" CQSCS371="USD" CQSCHK21="106.5098890000" />
</Detail_Collection>
</table1>
</Report>
我需要在细节节点中保留前四个属性,如图所示重命名节点,并将其余属性转换为细节节点的子元素
以下是期望的结果:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<SCRTS_Data_Collect LAST_ASOF_TSTMP="2019-11-06T00:00:00.000" DATA_ASOF_TSTMP="2019-11-06T00:00:00.000">
<SCRTS_Data_Collect_MS ID_RSSD="1037003" D_DT="2019-09-30T00:00:00" CQSCS383="S0010160276" TRANSTYPE="I">
<CQSCF841>11/06/2019</CQSCF841>
<CQSCP082>CUSIP</CQSCP082>
<CQSCP083>36202K2Q7</CQSCP083>
<CQSCS370>N</CQSCS370>
<CQSCP084>Agency MBS</CQSCP084>
<CQSCP085>G2 8883</CQSCP085>
<CQSCP087>8917</CQSCP087>
<CQSCP088>9008</CQSCP088>
<CQSCP089>8911</CQSCP089>
<CQSCP090>5200000</CQSCP090>
<CQSCP091>0</CQSCP091>
<CQSCP092>AFS</CQSCP092>
<CQSCP093>09/30/2019</CQSCP093>
<CQSCP094>0.07108</CQSCP094>
<CQSCP095>10/07/2000</CQSCP095>
<CQSCS371>USD</CQSCS371>
<CQSCHK21>101.090333</CQSCHK21>
</SCRTS_Data_Collect_MS>
</SCRTS_Data_Collect>
11/06/2019
库希普
36202K2Q7
N
机构房贷担保债券
G28883
8917
9008
8911
5200000
0
AFS
09/30/2019
0.07108
10/07/2000
美元
101.090333
我一直在使用的样式表具有以下代码:
<!-- rule to copy everything else xmlns="_x0031_4Q_CSV" -->
<xsl:template match="*/@*" xmlns="_x0031_4Q_CSV">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
<xsl:apply-templates/>
</xsl:template>
显然,这会将所有属性转换为元素。我已经放置了各种节点路径来代替*/@匹配,但是我没有得到任何结果,所以这显然是错误的
如果不清楚,请提前道歉。我已经有好几年没有使用XSLT了。你的样式表很完整,你的输出也没有很好的解释,但是要将attibutes转换为元素,你可以进行类似的转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d="_x0031_4Q_CSV">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="d:Detail">
<xsl:variable name="white-list" select="@ID_RSSD|@D_DT|@CQSCS383|@Transtype"/>
<xsl:copy>
<xsl:apply-templates select="$white-list"/>
<xsl:apply-templates select="@*[count(.|$white-list)!=count($white-list)]"
mode="element"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*" mode="element">
<xsl:element name="{name()}">
<xsl:value-of
select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="_x0031_4Q_CSV"
xsi:schemaLocation="_x0031_4Q_CSV http://MySSRSServer/ReportServer?%2FTRR%20Reports%2F14Q_CSV&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=uuurm045z4bsq2maejbbb045&rc%3ASchema=True"
Name="14Q_CSV"
textbox1="14Q_CSV Period:201711 Publish Date: 12/7/2017 4:38:49 PM">
<table1>
<Detail_Collection>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260053"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCC8</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537467</CQSCP085>
<CQSCP087 xmlns="">50768.00</CQSCP087>
<CQSCP088 xmlns="">53330.00</CQSCP088>
<CQSCP089 xmlns="">50667.00</CQSCP089>
<CQSCP090 xmlns="">12484343.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.070363000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">105.2563040000</CQSCHK21>
</Detail>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260054"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCD6</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537468</CQSCP085>
<CQSCP087 xmlns="">96069.00</CQSCP087>
<CQSCP088 xmlns="">106433.00</CQSCP088>
<CQSCP089 xmlns="">96069.00</CQSCP089>
<CQSCP090 xmlns="">12066524.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.067115000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">110.7884470000</CQSCHK21>
</Detail>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260057"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCH7</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537472</CQSCP085>
<CQSCP087 xmlns="">133804.00</CQSCP087>
<CQSCP088 xmlns="">151158.00</CQSCP088>
<CQSCP089 xmlns="">134964.00</CQSCP089>
<CQSCP090 xmlns="">6415504.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.064967000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">111.9988700000</CQSCHK21>
</Detail>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260058"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCJ3</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537473</CQSCP085>
<CQSCP087 xmlns="">188500.00</CQSCP087>
<CQSCP088 xmlns="">198238.00</CQSCP088>
<CQSCP089 xmlns="">186974.00</CQSCP089>
<CQSCP090 xmlns="">7054878.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.074321000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">106.0240080000</CQSCHK21>
</Detail>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260059"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCK0</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537474</CQSCP085>
<CQSCP087 xmlns="">53662.00</CQSCP087>
<CQSCP088 xmlns="">56159.00</CQSCP088>
<CQSCP089 xmlns="">52828.00</CQSCP089>
<CQSCP090 xmlns="">6033726.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.079403000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">106.3062160000</CQSCHK21>
</Detail>
<Detail ID_RSSD="1037003"
D_DT="2017-11-30T00:00:00"
CQSCS383="S0004260060"
Transtype="I">
<CQSCF841 xmlns="">2020-01-23T00:00:00</CQSCF841>
<CQSCP082 xmlns="">CUSIP</CQSCP082>
<CQSCP083 xmlns="">31384YCL8</CQSCP083>
<CQSCS370 xmlns="">N</CQSCS370>
<CQSCP084 xmlns="">Agency MBS</CQSCP084>
<CQSCP085 xmlns="">FN 537475</CQSCP085>
<CQSCP087 xmlns="">53958.00</CQSCP087>
<CQSCP088 xmlns="">57002.00</CQSCP088>
<CQSCP089 xmlns="">53518.00</CQSCP089>
<CQSCP090 xmlns="">5710436.00</CQSCP090>
<CQSCP091 xmlns="">0.00</CQSCP091>
<CQSCP092 xmlns="">AFS</CQSCP092>
<CQSCP093 xmlns="">2017-11-30T00:00:00</CQSCP093>
<CQSCP094 xmlns="">0.076705000000</CQSCP094>
<CQSCP095 xmlns="">2000-04-01T00:00:00</CQSCP095>
<CQSCS371 xmlns="">USD</CQSCS371>
<CQSCHK21 xmlns="">106.5098890000</CQSCHK21>
</Detail>
</Detail_Collection>
</table1>
</Report>
2020-01-23T00:00:00
库希普
31384YCC8
N
机构房贷担保债券
FN 537467
50768
53330
50667
12484343
0
AFS
2017-11-30T00:00:00
0.070363000000
2000-04-01T00:00:00
美元
105.2563040000
2020-01-23T00:00:00
库希普
31384YCD6
N
机构房贷担保债券
FN 537468
96069
106433
96069
12066524
0
AFS
2017-11-30T00:00:00
0.067115000000
2000-04-01T00:00:00
美元
110.7884470000
2020-01-23T00:00:00
库希普
31384YCH7
N
机构房贷担保债券
FN 537472
133804
151158
134964
6415504
0
AFS
2017-11-30T00:00:00
0.064967000000
2000-04-01T00:00:00
美元
111.9988700000
2020-01-23T00:00:00
库希普
31384YCJ3
N
机构房贷担保债券
FN 537473
188500
198238
186974
7054878
0
AFS
2017-11-30T00:00:00
0.074321000000
2000-04-01T00:00:00
美元
106.0240080000
2020-01-23T00:00:00
库希普
31384YCK0
N
机构房贷担保债券
FN 537474
53662
56159
52828
6033726
0
AFS
2017-11-30T00:00:00
0.079403000000
2000-04-01T00:00:00
美元
106.3062160000
2020-01-23T00:00:00
库希普
31384YCL8
N
机构房贷担保债券
FN 537475
53958
57002
53518
5710436
0
AFS
2017-11-30T00:00:00
0.076705000000
2000-04-01T00:00:00
美元
106.5098890000
注意:属性应该在任何其他节点类型之前输出,Kaysian方法用于排除。这很完美,Alejandro;谢谢现在我必须弄清楚如何合并名称更改。必须将元素重命名为“CRTS_Data_Collect_MS”才能输出,但我还没有看到一种方法可以与您编写的属性模板一起使用。@philhege您只需要将
xsl:copy
指令更改为SCRTS_Data_Collect_MS
literal result元素。