Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 仅当有多个段落时才对段落进行编号_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt 仅当有多个段落时才对段落进行编号

Xslt 仅当有多个段落时才对段落进行编号,xslt,xslt-1.0,Xslt,Xslt 1.0,我使用XSLT1.0将简单的XML转换为HTML。我使用模板对标题下的段落进行编号。如果标题下只有一个段落,我正在与禁用编号的情况作斗争 我的XML: <document title="Lorem Ipsum"> <heading title="Heading 1" id="HEADING-1"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy ei

我使用XSLT1.0将简单的XML转换为HTML。我使用模板对标题下的段落进行编号。如果标题下只有一个段落,我正在与禁用编号的情况作斗争

我的XML:

<document title="Lorem Ipsum">
<heading title="Heading 1" id="HEADING-1">
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</heading>
<heading title="Heading 2" id="HEADING-2">
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</heading>

他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的。他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的

他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的。他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的

他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的。他说:“我的工作是在工作中完成的,我的工作是在工作中完成的,我的工作是在工作中完成的。”。在vero eos和accusam以及justo duo dolores和ea Reum。斯泰特·克莱塔·卡斯德·古伯格伦(Stet clita kasd gubergren),没有海洋保护区是属于同一领域的

我的XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html lang="en">
    <body>
        <xsl:apply-templates/>
    </body>
  </html>
</xsl:template>

<xsl:template match="heading">
  <h1 id="{@id}">
    <xsl:number format="1. " level="multiple" count="heading"/>
    <xsl:value-of select="@title"/>
  </h1>

<xsl:apply-templates />
</xsl:template>

<xsl:template match="p">
  <p>
    <!-- TODO: If there is only one paragraph under a heading: no numbering! -->
    <xsl:number format="(1) " level="single" count="p"/>
    <xsl:apply-templates />
  </p>
</xsl:template>

</xsl:stylesheet>



通过这种设置,不仅标题1下的两个段落被编号,标题2下的单个段落也被编号。如果标题下只有一段,我想取消编号。我尝试了许多条件,如
,但找不到解决方案。

一个解决方案可能是:检查在当前处理的
之前(使用
前面的同级轴)或之后(使用
后面的同级轴)是否找到了p

您可以通过修改样式表并添加如下条件来实现它:

<xsl:if test="preceding-sibling::p or following-sibling::p">
  <xsl:number format="(1) " level="single" count="p"/>
</xsl:if>

或稍后:

<xsl:if test="count(../p) > 1">
    <xsl:number format="(1) "/>
</xsl:if>

这是一个很好的解决方案,我们还可以补充一点,OP的
计数(*)
测试不起作用的原因是
p
模板中的
*
将引用
p
的子元素,而OP真正想计数
。/*
/p