【发布时间】:2017-06-14 23:05:52
【问题描述】:
我正在制作一个表格,其中标题名称来自 header 元素,数据来自 reportdata 的 attributes元素。但是,我不知道属性的名称:Value1, Value2, ect..。属性的名称被生成并存储到 FieldName 属性中,该属性位于 reportnode 内的 column 元素内。
我还没有找到一种方法来制作使用生成的 FieldNames 并从 reportdata 获取相应属性值的 XPath。有任何想法吗?或者这是不可能的。
以下是 XML:
<report>
<reportparameters>
<header Order="1" HeaderName="Day_1" />
<header Order="2" HeaderName="Day_2" />
<header Order="3" HeaderName="Day_3" />
<header Order="4" HeaderName="Total" />
<reportnode ColumnCount="4">
<column Order="1" FieldName="Value1" />
<column Order="2" FieldName="Value2" />
<column Order="3" FieldName="Value3" />
<column Order="4" FieldName="TotalValue" />
</reportnode>
</reportparameters>
<reportdata Value1="0" Value2="0" Value3="0" TotalValue="0"/>
<reportdata Value1="0" Value2="0" Value3="0" TotalValue="0"/>
<reportdata Value1="0" Value2="0" Value3="0" TotalValue="0"/>
<reportdata Value1="0" Value2="0" Value3="0" TotalValue="0"/>
<reportdata Value1="0" Value2="0" Value3="0" TotalValue="0"/>
</report>
XSL 尝试:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="/">
<report>
<row>
<xsl:for-each select="/report/reportparameters/header">
<xsl:variable name="columnCounter" select="position()"/>
<xsl:element name="{./@HeaderName}">
<xsl:for-each select="/report/reportdata">
<xsl:value-of select="@{../reportparameters/reportnode/column[@Order=$columnCounter+1]/@FieldName}"/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</row>
</report>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
你想要得到什么结果?请使用不同的单元格值,以便我们理解转换的逻辑。
-
@michael.hor257k 我一定会确保下次发布我想要的结果。幸运的是,没有它你仍然能够帮助我!