<EmployeeDetails>
<Employee>
<Name>TEST</Name>
</Employee>
<Employee>
<Name>TEST</Name>
</Employee>
<Employee>
<Name>TEST</Name>
</Employee>
<Employee>
<Name>TEST</Name>
</Employee>
<Employee>
<Name>TEST</Name>
</Employee>
</EmployeeDetails>
我尝试使用xslt,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xd"
version="1.0">
<xsl:template match="EmployeeDetails/Employee">
<xsl:copy>
<xsl:attribute name="id"><xsl:value-of select="position()"/></xsl:attribute>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
对于上面的xslt,position()的输出打印为2,4,6,8,10。
,输出应为:
<EmployeeDetails>
<Employee id="1">
<Name>TEST</Name>
</Employee>
<Employee id="2">
<Name>TEST</Name>
</Employee>
<Employee id="3">
<Name>TEST</Name>
</Employee>
<Employee id="4">
<Name>TEST</Name>
</Employee>
<Employee id="5">
<Name>TEST</Name>
</Employee>
</EmployeeDetails>
如何打印像1,2,3 ....作为id属性的序列。
答案 0 :(得分:26)
xsl:number
指令正是为了完成这项任务而做的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Employee">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="id">
<xsl:number/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输出:
<EmployeeDetails>
<Employee id="1">
<Name>TEST</Name>
</Employee>
<Employee id="2">
<Name>TEST</Name>
</Employee>
<Employee id="3">
<Name>TEST</Name>
</Employee>
<Employee id="4">
<Name>TEST</Name>
</Employee>
<Employee id="5">
<Name>TEST</Name>
</Employee>
</EmployeeDetails>
答案 1 :(得分:7)
在您第一次<xsl:template>
之前,添加
<xsl:strip-space elements="*"/>
这将消除@khachik所指的仅空白文本节点。那么你的位置数应该是你期望的。
答案 2 :(得分:2)
此模板可生成您所需的内容:
<xsl:template match="EmployeeDetails/Employee">
<xsl:copy>
<xsl:attribute name="id">
<xsl:value-of select="count(preceding-sibling::Employee) + 1"/>
</xsl:attribute>
</xsl:copy>
</xsl:template>