在我之前發佈的Tim的幫助下,我能夠獲得Muenchian分組爲我的測試xml/xsl工作。但是,在處理我的實際XML時,我遇到了與下面不同的場景。輸入xml看起來像,簡化了它。正如你看到<name>Status</name> <value>Existing</value>
在實際的xml中有很多其他的條目。Muenchian分組 - 根據行數顯示二級基地
<message>
<requisition>
<data-values>
<data-value multi-valued="false">
<name>Test_Grid-1.Name</name> <value>1</value>
</data-value>
<data-value multi-valued="false">
<name>Test_Grid-1.SupportType</name> <value>Monthly,Quarterly</value>
</data-value>
<data-value multi-valued="false">
<name>Test_Grid-2.Name</name> <value>2</value>
</data-value>
<data-value multi-valued="false">
<name>Test_Grid-2.SupportType</name> <value>Monthly</value>
</data-value>
<data-value multi-valued="false">
<name>Status</name> <value>Existing</value>
</data-value>
</data-values>
</requisition>
<agent-parameter multi-valued="false">
<name>ActionType</name> <value>New</value>
</agent-parameter>
<agent-parameter multi-valued="false">
<name>Dictionary</name> <value>Test_Grid</value>
</agent-parameter>
<agent-parameter multi-valued="false">
<name>ActionName</name> <value>SupportData</value>
</agent-parameter>
</message>
我使用的XSL是:
<xsl:key name="record" match="data-value" use="substring-before(name, '.')" />
<xsl:template match="message">
<record>
<xsl:apply-templates select="//data-value[generate-id() = generate-id(key('record', substring-before(name, '.'))[1])]" mode="record" />
</record>
</xsl:template>
<xsl:template match="data-value" mode="record">
<rowData>
<name><xsl:value-of select="$ServiceItemName" /></name>
<xsl:apply-templates select="key('record', substring-before(name, '.'))" />
</rowData>
</xsl:template>
<xsl:template match="data-value">
<xsl:if test="starts-with(name,concat($Dictionary,'-'))">
<rowAttribute name="{substring-after(name, '.')}"><xsl:value-of select="value" /> </rowAttribute>
</xsl:if>
</xsl:template>
實際輸入XML包含不同的數據值(比其他Test_Grid-1或Test_Grid-2等)。在這種情況下,xsl會拉動所有這些元素並顯示在裏面。有沒有什麼辦法可以過濾僅以「Test_Grid-」開頭的值(我的代理參數名稱爲Dictionary
,值爲「Test_Grid」),並且xsl將僅提取名稱開頭的那些數據值 - concat($Dictionary,'-')
。我想類似下面
<xsl:template match="data-value">
<xsl:if test="starts-with(name,concat($Dictionary,'-'))">
<rowAttribute name="{substring-after(name, '.')}"><xsl:value-of select="value" /></rowAttribute>
</xsl:if>
但它顯示類似下面的輸出空元素所需的輸出功率一起。
<record>
<name>SupportData</ext:name>
</record>
<record>
<name>SupportData</name>
<rowData>
<rowAttribute name="Name">Record1</rowAttribute>
<rowAttribute name="SupportType">Quarterly</rowAttribute>
</rowData>
</record>
有沒有一種方法可以顯示元素,只有當它有一些rowData元素。
任何和所有的幫助將非常感激。