Xslt 如何使用xsl number对组中的元素进行计数
我将按如下顺序计算程序步骤。我不知道如何实施 XML: 对架构有效:Xslt 如何使用xsl number对组中的元素进行计数,xslt,Xslt,我将按如下顺序计算程序步骤。我不知道如何实施 XML: 对架构有效: <?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.o
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="mainProcedure" type="mainProcedureElemType"/>
<xs:complexType name="mainProcedureElemType">
<xs:choice maxOccurs="unbounded">
<xs:element ref="proceduralStep"/>
<xs:element ref="proceduralStepAlts"/>
</xs:choice>
</xs:complexType>
<xs:element name="proceduralStep" type="proceduralStepElemType"/>
<xs:complexType name="proceduralStepElemType">
<xs:sequence>
<xs:element ref="title"/>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="proceduralStep"/>
<xs:element ref="proceduralStepAlts"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:element name="proceduralStepAlts" type="proceduralStepAltsElemType"/>
<xs:complexType name="proceduralStepAltsElemType">
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="proceduralStep"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
期望输出:
1.
1.
2.
3.
3.1
3.1
3.2
3.
四,
为什么需要输出:过程步骤包装多个过程步骤,集合仅被视为“一”,因此每个过程步骤都以相同的大纲编号显示 此样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="proceduralStepAlts">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="proceduralStep[parent::proceduralStepAlts]">
<xsl:value-of select="
count(parent::proceduralStepAlts/preceding-sibling::proceduralStepAlts)
+ count(parent::proceduralStepAlts/preceding-sibling::proceduralStep)
+ 1"/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="proceduralStep[parent::mainProcedure]">
<xsl:value-of select="
count(preceding-sibling::proceduralStepAlts)
+ count(preceding-sibling::proceduralStep)
+ 1"/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
使用提供的输入生成所需的输出。此转换:
第二种解决方案:
我认为您只是在计算根元素下面的元素,所以可以使用这个表达式
<xsl:number count="/*/*" />
你能解释一下为什么输出应该是1233吗?分配这些数字的逻辑是什么?这个问题一点也不清楚。输出是因为过程步骤包装了多个过程步骤,集合被认为只有“一个”,因此每个过程步骤都显示相同的大纲编号。user2268666,根据您的解释,我的答案就是这样。我的回答对你有用吗,还是你还有什么问题?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="proceduralStepAlts/proceduralStep">
<xsl:value-of select=
"concat(count(../preceding-sibling::*) +1, ' ')"/>
</xsl:template>
<xsl:template match="/*/proceduralStep">
<xsl:value-of select=
"concat(count(preceding-sibling::*) +1, ' ')"/>
</xsl:template>
</xsl:stylesheet>
<mainProcedure>
<proceduralStepAlts>
<proceduralStep/>
<proceduralStep/>
</proceduralStepAlts>
<proceduralStep/>
<proceduralStepAlts>
<proceduralStep/>
<proceduralStep/>
</proceduralStepAlts>
</mainProcedure>
1 1 2 3 3
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:apply-templates select="*[self::proceduralStep or proceduralStep]"/>
</xsl:template>
<xsl:template match="proceduralStep | proceduralStepAlts">
<xsl:variable name="vPos" select="position()"/>
<xsl:for-each select="self::proceduralStep | proceduralStep">
<xsl:value-of select="concat($vPos, ' ')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
1 1 2 3 3
<xsl:number count="/*/*" />
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="proceduralStep">
<xsl:number count="/*/*" />
</xsl:template>
</xsl:stylesheet>
11233