Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 如何使用xsl number对组中的元素进行计数_Xslt - Fatal编程技术网

Xslt 如何使用xsl number对组中的元素进行计数

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:

对架构有效:

<?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