을 나는 그룹과 피벗 입력 XML 데이터에 노력하고 JSON으로 변환하고있어, 나는 내가 dymanic 열 이름을 고려 무엇 이외의 작업의 대부분을 이 내 현재 XSLT이다XSLT 피벗 동적 열
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:output method="text" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="root">
<xsl:text>{"root":{</xsl:text>
<xsl:text>"Table":[</xsl:text>
<xsl:for-each-group select="Metric[@TableName != '']" group-by="@measObjLdn">
<xsl:sort select="current-grouping-key()"/>
<xsl:variable name="curr_key" select="current-grouping-key()"/>
<xsl:for-each-group select="current-group()[@TableName!='']" group-by="@TableName">
<xsl:sort select="current-grouping-key()"/>
<xsl:text>{"TableName":"</xsl:text>
<xsl:value-of select="current-grouping-key()"/>
<xsl:text>",</xsl:text>
<xsl:text>"Stamp":"</xsl:text>
<xsl:value-of select="@BeginTime"/>
<xsl:text>",</xsl:text>
<xsl:text>"measObjLdn":"</xsl:text>
<xsl:value-of select="$curr_key"/>
<xsl:text>",</xsl:text>
<xsl:text>"Element_Type":"</xsl:text>
<xsl:value-of select="@Element_Type"/>
<xsl:text>",</xsl:text>
<xsl:text>"Key1":"</xsl:text>
<xsl:value-of select="@Key1"/>
<xsl:text>"</xsl:text>
<xsl:for-each select="current-group()">
<xsl:for-each select="@ColumnName">
<xsl:text>,"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>":"</xsl:text>
<xsl:value-of select="@measResult"/>
<xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:for-each>
<xsl:text>}</xsl:text>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each-group>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each-group>
<xsl:text>]}}</xsl:text>
</xsl:template>
</xsl:stylesheet>
는 다음의 XSLT의 출력은 다음과됩니다
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Metric measType="50332573"
infoid="50331655"
measResult="768"
h50332573="768"
BeginTime="2016-12-29T23:30:00-07:00"
measObjLdn="THAB23626/ULGROUP:UL BB Resource Group No.=0"
Element_Type="ULGROUP"
Key1="THAB23626/ULGROUP:=0"
TableName="HH_CORE_BASE"
ColumnName="VSCEULAVAILABLEULGROUP"
VSCEULAVAILABLEULGROUP="768"/>
<Metric measType="50332574"
infoid="50331655"
measResult="14.65"
h50332574="14.65"
BeginTime="2016-12-29T23:30:00-07:00"
measObjLdn="THAB23626/ULGROUP:UL BB Resource Group No.=0"
Element_Type="ULGROUP"
Key1="THAB23626/ULGROUP:=0"
TableName="HH_CORE_BASE"
ColumnName="VSCEULMEANULGROUP"
VSCEULMEANULGROUP="14.65"/>
<Metric measType="50342574"
infoid="50331655"
measResult="8.5"
h50342574="8.5"
BeginTime="2016-12-29T23:30:00-07:00"
measObjLdn="THAB23626/ULGROUP:UL BB Resource Group No.=0"
Element_Type="ULGROUP"
Key1="THAB23626/ULGROUP:=0"
TableName="HH_CORE_BASE"
ColumnName="VSCEULMINULGROUP"
VSCEULMINULGROUP="8.5"/>
<Metric measType="50342575"
infoid="50331655"
measResult="23.5"
h50342575="23.5"
BeginTime="2016-12-29T23:30:00-07:00"
measObjLdn="THAB23626/ULGROUP:UL BB Resource Group No.=0"
Element_Type="ULGROUP"
Key1="THAB23626/ULGROUP:=0"
TableName="HH_CORE_BASE"
ColumnName="VSCEULMAXULGROUP"
VSCEULMAXULGROUP="23.5"/>
<Metric measType="50342635"
infoid="50331655"
measResult="0"
h50342635="0"
BeginTime="2016-12-29T23:30:00-07:00"
measObjLdn="THAB23626/ULGROUP:UL BB Resource Group No.=0"
Element_Type="ULGROUP"
Key1="THAB23626/ULGROUP:=0"
TableName=""/>
</root>
파일의 샘플입니다 그러나 내가 열, 즉 "VSCEULMEANULGROUP"에서 값 누락 : "14.65"을, 그것 인을 사용하여 코드를 쉽게 정적 ColumnName 및 measResult (나를 위해 작동하지 않습니다) 또는 "VSCEULME 는 XML
{
"root":{
"Table":[{
"TableName":"HH_CORE_BASE",
"Stamp":"2016-12-29T23:30:00-07:00",
"measObjLdn":"THAB23626/ULGROUP:UL BB Resource Group No.=0",
"Element_Type":"ULGROUP",
"Key1":"THAB23626/ULGROUP:=0",
"VSCEULAVAILABLEULGROUP":"",
"VSCEULMEANULGROUP":"",
"VSCEULMINULGROUP":"",
"VSCEULMAXULGROUP":""
}
]
}
}
더 많은 사람들이 질문을 연구하기를 원할 경우, 그것을 단순화하는 것이 좋습니다. foo와 bar라는 두 가지 속성으로 문제가 완벽하게 잘 설명 될 수있는 경우 VSCEULAVAILABLEULGROUP과 같은 20 개의 속성을 통해 웨이드하지 않아도됩니다. –