Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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/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
Xml 哪些元素具有最小子元素XSL_Xml_Xslt - Fatal编程技术网

Xml 哪些元素具有最小子元素XSL

Xml 哪些元素具有最小子元素XSL,xml,xslt,Xml,Xslt,这是xml文件: 杜拉塔护理中心(durata care corespunde desfasurarii unui evenimen) 弗里姆 塞松 杜拉塔 照管好你的孩子,让他们在一起 蒙西托 萨金西奥斯 斯考斯在火光中凝视着伊里塔尔 神经 塞瓦-库米罗斯广场,弗鲁莫斯 米雷斯马 埃森塔 米罗斯 殖民地 卡帕特酒店 桶 文迪卡的实用性物质,阿梅利奥拉·索普雷韦尼和博阿拉 万能药 浸出 雷米杜 如您的问题中所述,对每个循环使用,您将只获得具有最小sens节点计数的元素中的一个。例如,您可以对

这是xml文件:


杜拉塔护理中心(durata care corespunde desfasurarii unui evenimen)
弗里姆
塞松
杜拉塔
照管好你的孩子,让他们在一起
蒙西托
萨金西奥斯
斯考斯在火光中凝视着伊里塔尔
神经
塞瓦-库米罗斯广场,弗鲁莫斯
米雷斯马
埃森塔
米罗斯
殖民地
卡帕特酒店
桶
文迪卡的实用性物质,阿梅利奥拉·索普雷韦尼和博阿拉
万能药
浸出
雷米杜

如您的问题中所述,对每个循环使用
,您将只获得具有最小
sens
节点计数的元素中的一个。例如,您可以对每个
使用第一个
,以获得最小计数,然后打印所有
cuvant
节点的
titlu
属性值,最小计数如下:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"  omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="sinonime">
  <xsl:variable name="min">
    <xsl:for-each select="cuvant">
      <xsl:sort select="count(sens)" data-type="number" order="ascending"/>
      <xsl:if test="position()=1">
        <xsl:value-of select="count(sens)"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:variable>
  <xsl:for-each select="cuvant[count(sens)=$min]">
   <xsl:value-of select="@titlu"/>
     <xsl:if test="position() != last()">
       <xsl:text>&#xa;</xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:transform>

您可以通过首先创建一个简单的文档,其中包含每个“cuvant”的计数和名称,从而轻松解决此问题,例如:

<counts>
   <count name="timp" n="3"/>
   <count name="harnic" n="2"/>
   ...
</counts>
<counts>
   <count name="timp" n="3"/>
   <count name="harnic" n="2"/>
   ...
</counts>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs"
                version="2.0">

   <xsl:variable name="doc" as="element()">
      <sinonime>
        <cuvant titlu="timp">
            <definitie>durata care corespunde desfasurarii unui evenimen</definitie>
            <sens>vreme</sens>
            <sens>sezon</sens>
            <sens>durata</sens>
        </cuvant>
        <cuvant titlu="harnic">
            <definitie>care munceste mult, repede si cu folos</definitie>
            <sens>muncitor</sens>
            <sens>sarguincios</sens>
        </cuvant>
        <cuvant titlu="Enervat">
            <definitie>scos din fire, in stare de iritare</definitie>
            <sens>nervos</sens>
        </cuvant>
        <cuvant titlu="parfum">
            <definitie>ceva cu miros placut, frumos</definitie>
            <sens>mireasma</sens>
            <sens>esenta</sens>
            <sens>miros</sens>
            <sens>colonie</sens>
        </cuvant>
        <cuvant titlu="Eprubeta">
            <definitie>tub de sticla inchis la capat</definitie>
            <sens>tub</sens>
        </cuvant>
        <cuvant titlu="medicament">
            <definitie>substanta utilizata pentru a vindeca, ameliora sau preveni o boala</definitie>
            <sens>elixir</sens>
            <sens>leac</sens>
            <sens>remediu</sens>
        </cuvant>
      </sinonime>
   </xsl:variable>

   <xsl:template match="/" name="main">
      <xsl:apply-templates select="$doc"/>
   </xsl:template>

   <xsl:template match="sinonime">
      <xsl:variable name="counts" as="element()">
         <counts>
            <xsl:apply-templates select="*"/>
         </counts>
      </xsl:variable>
      <xsl:variable name="min" select="min($counts/count/xs:integer(@n))"/>
      <results>
         <xsl:for-each select="$counts/count[xs:integer(@n) eq $min]">
            <result>
              <xsl:value-of select="@name"/>
            </result>
         </xsl:for-each>
      </results>
   </xsl:template>

   <xsl:template match="cuvant">
      <count name="{ @titlu }" n="{ count(sens) }"/>
   </xsl:template>

</xsl:stylesheet>