感谢您的回复。
很抱歉不清楚这个问题。
我创建了XSLT,如下所示。
`
<xsl:output indent="yes"/>
<xsl:template match="/">
<DataElementsList>
<xsl:for-each select="//BC4JDataElementTransferObject">
<xsl:variable name="index" select="count(preceding-sibling::BC4JDataElementTransferObject)+1" />
<DataElement>
<PUBLICID>
<xsl:value-of select="//BC4JDataElementTransferObject[$index]/@public-id"/>
</PUBLICID>
<LONGNAME>
<xsl:value-of select="//BC4JDataElementTransferObject[$index]/long-name"/>
</LONGNAME>
</DataElement>
</xsl:for-each>
</DataElementsList>
</xsl:template>
`
到目前为止,我已将输出作为XML文件输出如下。
<?xml version="1.0" encoding="UTF-8"?>
<DataElementsList>
<DataElement>
<PUBLICID>2183222</PUBLICID>
<LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
</DataElement>
<DataElement>
<PUBLICID>7777777</PUBLICID>
<LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
</DataElement>
</DataElementsList>
我想让可重复的标签有反击。请看下面的示例。
<?xml version="1.0" encoding="UTF-8"?>
<DataElementsList>
<DataElement num="1">
<PUBLICID>2183222</PUBLICID>
<LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
</DataElement>
<DataElement num="2">
<PUBLICID>7777777</PUBLICID>
<LONGNAME>Alpha DVG Blood Pressure, Diastolic</LONGNAME>
</DataElement>
</DataElementsList>
从我的XSLT,我如何创建“数据元素”标签,当我运行转换时,我的输出XML将在标签内部有计数器?
答案 0 :(得分:1)
如果我正确理解了这个问题,你只想为每个包含“index”变量值的“DataElement”节点添加一个“num”属性。
如果在XSLT中替换此元素:
<DataElement>
使用此元素:
<DataElement num="{$index}">
然后你应该得到你在例子中提供的输出。
答案 1 :(得分:1)
不知道您的XML是什么样的,我将在该部分做出一些假设。但是,基本思想仍然有效。这就是您需要做的就是使用position()
来创建索引。
我意识到这种情况与您目前的情况略有不同,但应该更有效并产生更好的结果。
所以如果你采用这个XML
<root>
<BC4JDataElementTransferObject/>
<BC4JDataElementTransferObject/>
<BC4JDataElementTransferObject/>
<BC4JDataElementTransferObject/>
<BC4JDataElementTransferObject/>
</root>
并将此XSL应用于它
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<DataElementsList>
<xsl:apply-templates select="//BC4JDataElementTransferObject"/>
</DataElementsList>
</xsl:template>
<xsl:template match="BC4JDataElementTransferObject">
<xsl:variable name="index" select="position()" />
<DataElement num="{$index}">
Content here
</DataElement>
</xsl:template>
</xsl:stylesheet>
你得到这个输出
<DataElementsList>
<DataElement num="1">
Content here
</DataElement>
<DataElement num="2">
Content here
</DataElement>
<DataElement num="3">
Content here
</DataElement>
<DataElement num="4">
Content here
</DataElement>
<DataElement num="5">
Content here
</DataElement>
</DataElementsList>
答案 2 :(得分:1)
position()
xsl:number
(http://www.w3.org/TR/xslt#number)的另一种<DataElement>
<xsl:attribute name="num">
<xsl:number/>
</xsl:attribute>
<!--additional content...-->
</DataElement>
替代方案更灵活/更有能力。
示例:
{{1}}