Я пытаюсь группировать данные и ввод сводной XML и конвертировать в формат JSON, у меня есть большинство рабочих, кроме того, что я считаю, что имя столбца dymanic Это мой текущий XSLTXSLT Pivot Динамические столбцы
<?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>
Ниже приведен пример в файле
<?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>
выход из XSLT является следует, однако, я пропускаю значение из столбца, т.е. «VSCEULMEANULGROUP»: «14,65», это проще код, используя static ColumnName и measResult (который не работает для меня) или «VSCEULME ANULGROUP «=» 14,65" из 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":""
}
]
}
}
Если вы хотите, чтобы больше людей изучали вопрос, подумайте об упрощении его. Нам не нужно пробираться через 20 атрибутов с такими именами, как VSCEULAVAILABLEULGROUP, когда проблема может быть хорошо проиллюстрирована двумя атрибутами, называемыми foo и bar. –