首页 > 解决方案 > 按子节点元素排序 current-group() 并得到结果

问题描述

又是我。抱歉,这次我有一个更重要的问题要问你们。这是xml:

<titre>
<p type="titre">
<item><a>1</a><a>Ce</a><a>ce</a><a>PRO</a><a>PRO</a><a>n=s</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>que</a><a>que</a><a>PROREL</a><a>PROREL</a><a></a><a>5</a><a>obj</a><a>5</a><a>obj</a></item>
<item><a>3</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>4</a><a>det</a><a>4</a><a>det</a></item>
<item><a>4</a><a>on</a><a>on</a><a>CLS</a><a>CLS</a><a>n=s|p=3</a><a>5</a><a>suj</a><a>5</a><a>suj</a></item>
<item><a>5</a><a>sait</a><a>savoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>1</a><a>mod_rel</a><a>1</a><a>mod_rel</a></item>
<item><a>6</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>7</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>8</a><a>det</a><a>8</a><a>det</a></item>
<item><a>8</a><a>attentat</a><a>attentat</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>6</a><a>prep</a><a>6</a><a>prep</a></item>
<item><a>9</a><a>du</a><a>de</a><a>P+D</a><a>P+D</a><a>n=s|g=m</a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>10</a><a>Nouvel</a><a>_</a><a>ADJ</a><a>ADJ</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>11</a><a>An</a><a>An</a><a>NPP</a><a>NPP</a><a>n=s</a><a>9</a><a>prep</a><a>9</a><a>prep</a></item>
<item><a>12</a><a>dans</a><a>dans</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>13</a><a>un</a><a>un</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>14</a><a>det</a><a>14</a><a>det</a></item>
<item><a>14</a><a>club</a><a>club</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>12</a><a>prep</a><a>12</a><a>prep</a></item>
<item><a>15</a><a>d'</a><a>de</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>16</a><a>Istanbul</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>15</a><a>prep</a><a>15</a><a>prep</a></item>
<item><a>17</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>16</a><a>ponct</a><a>16</a><a>ponct</a></item>
<item><a>18</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>16</a><a>ponct</a><a>16</a><a>ponct</a></item>
</p>
</titre>
<titre>
<p type="titre">
<item><a>1</a><a>Tiers</a><a>tiers</a><a>NC</a><a>NC</a><a>g=m</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>payant</a><a>payant</a><a>ADJ</a><a>ADJ</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>3</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>2</a><a>ponct</a><a>2</a><a>ponct</a></item>
<item><a>4</a><a>paquet</a><a>paquet</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>5</a><a>neutre</a><a>neutre</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>6</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>5</a><a>ponct</a><a>5</a><a>ponct</a></item>
<item><a>7</a><a>divorce</a><a>divorce</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>8</a><a>…&lt;/a><a>…&lt;/a><a>PONCT</a><a>PONCT</a><a></a><a>7</a><a>ponct</a><a>7</a><a>ponct</a></item>
<item><a>9</a><a>ce</a><a>ce</a><a>PRO</a><a>PRO</a><a>n=s</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>10</a><a>qui</a><a>qui</a><a>PROREL</a><a>PROREL</a><a>n=s</a><a>11</a><a>suj</a><a>11</a><a>suj</a></item>
<item><a>11</a><a>change</a><a>changer</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>9</a><a>mod_rel</a><a>9</a><a>mod_rel</a></item>
<item><a>12</a><a>en</a><a>en</a><a>P</a><a>P</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>13</a><a>janvier</a><a>janvier</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>12</a><a>prep</a><a>12</a><a>prep</a></item>
<item><a>14</a><a>2017</a><a>2017</a><a>NC</a><a>NC</a><a></a><a>13</a><a>mod</a><a>13</a><a>mod</a></item>
<item><a>15</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>14</a><a>ponct</a><a>14</a><a>ponct</a></item>
<item><a>16</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>14</a><a>ponct</a><a>14</a><a>ponct</a></item>
</p>
</titre>
<description>
<p type="description">
<item><a>1</a><a>CETA</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>9</a><a>suj</a><a>9</a><a>suj</a></item>
<item><a>2</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>1</a><a>ponct</a><a>1</a><a>ponct</a></item>
<item><a>3</a><a>TPP</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>4</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>3</a><a>ponct</a><a>3</a><a>ponct</a></item>
<item><a>5</a><a>Tafta</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>6</a><a>...</a><a>...</a><a>PONCT</a><a>PONCT</a><a></a><a>5</a><a>ponct</a><a>5</a><a>ponct</a></item>
<item><a>7</a><a>2016</a><a>2016</a><a>NC</a><a>NC</a><a></a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>8</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>9</a><a>aux_tps</a><a>9</a><a>aux_tps</a></item>
<item><a>9</a><a>porté</a><a>porter</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>10</a><a>au</a><a>à</a><a>P+D</a><a>P+D</a><a>n=s|g=m</a><a>9</a><a>mod</a><a>9</a><a>mod</a></item>
<item><a>11</a><a>libre</a><a>libre</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>13</a><a>mod</a><a>13</a><a>mod</a></item>
<item><a>12</a><a>-</a><a>-</a><a>PONCT</a><a>PONCT</a><a></a><a>11</a><a>ponct</a><a>11</a><a>ponct</a></item>
<item><a>13</a><a>échange</a><a>échanger</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>9</a><a>mod</a><a>9</a><a>mod</a></item>
<item><a>14</a><a>un</a><a>un</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>15</a><a>det</a><a>15</a><a>det</a></item>
<item><a>15</a><a>coup</a><a>coup</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>13</a><a>obj</a><a>13</a><a>obj</a></item>
<item><a>16</a><a>dont</a><a>dont</a><a>PROREL</a><a>PROREL</a><a></a><a>18</a><a>obj</a><a>18</a><a>obj</a></item>
<item><a>17</a><a>il</a><a>il</a><a>CLS</a><a>CLS</a><a>n=s|g=m|p=3</a><a>18</a><a>suj</a><a>18</a><a>suj</a></item>
<item><a>18</a><a>pourrait</a><a>pouvoir</a><a>V</a><a>V</a><a>n=s|t=C|p=3</a><a>15</a><a>mod_rel</a><a>15</a><a>mod_rel</a></item>
<item><a>19</a><a>garder</a><a>garder</a><a>VINF</a><a>VINF</a><a>t=W</a><a>18</a><a>obj</a><a>18</a><a>obj</a></item>
<item><a>20</a><a>pour</a><a>pour</a><a>P</a><a>P</a><a></a><a>19</a><a>mod</a><a>19</a><a>mod</a></item>
<item><a>21</a><a>longtemps</a><a>longtemps</a><a>ADV</a><a>ADV</a><a></a><a>23</a><a>mod</a><a>23</a><a>mod</a></item>
<item><a>22</a><a>des</a><a>des</a><a>DET</a><a>DET</a><a>n=p</a><a>23</a><a>det</a><a>23</a><a>det</a></item>
<item><a>23</a><a>séquelles</a><a>séquelle</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>20</a><a>prep</a><a>20</a><a>prep</a></item>
<item><a>24</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>23</a><a>ponct</a><a>23</a><a>ponct</a></item>
<item><a>25</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>23</a><a>ponct</a><a>23</a><a>ponct</a></item>
</p>
</description>
<description>
<p type="description">
<item><a>1</a><a>L'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>4</a><a>det</a><a>4</a><a>det</a></item>
<item><a>2</a><a>ancien</a><a>ancien</a><a>ADJ</a><a>ADJ</a><a>n=s|g=m</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>3</a><a>premier</a><a>premier</a><a>ADJ</a><a>ADJ</a><a>n=s|g=m</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>4</a><a>ministre</a><a>ministre</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>7</a><a>suj</a><a>7</a><a>suj</a></item>
<item><a>5</a><a>socialiste</a><a>socialiste</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>6</a><a>portugais</a><a>portugais</a><a>ADJ</a><a>ADJ</a><a>g=m</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>7</a><a>succède</a><a>succéder</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>8</a><a>à</a><a>à</a><a>P</a><a>P</a><a></a><a>7</a><a>mod</a><a>7</a><a>mod</a></item>
<item><a>9</a><a>Ban</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>8</a><a>prep</a><a>8</a><a>prep</a></item>
<item><a>10</a><a>Ki</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>9</a><a>mod</a><a>9</a><a>mod</a></item>
<item><a>11</a><a>-</a><a>-</a><a>PONCT</a><a>PONCT</a><a></a><a>10</a><a>ponct</a><a>10</a><a>ponct</a></item>
<item><a>12</a><a>moon</a><a>_</a><a>NC</a><a>NC</a><a></a><a>9</a><a>mod</a><a>9</a><a>mod</a></item>
<item><a>13</a><a>à</a><a>à</a><a>P</a><a>P</a><a></a><a>7</a><a>mod</a><a>7</a><a>mod</a></item>
<item><a>14</a><a>la</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>15</a><a>det</a><a>15</a><a>det</a></item>
<item><a>15</a><a>tête</a><a>tête</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>13</a><a>prep</a><a>13</a><a>prep</a></item>
<item><a>16</a><a>des</a><a>de</a><a>P+D</a><a>P+D</a><a>n=p</a><a>15</a><a>dep</a><a>15</a><a>dep</a></item>
<item><a>17</a><a>Nations</a><a>nation</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>16</a><a>prep</a><a>16</a><a>prep</a></item>
<item><a>18</a><a>unies</a><a>unir</a><a>VPP</a><a>VPP</a><a>n=p|g=f|t=K</a><a>17</a><a>mod</a><a>17</a><a>mod</a></item>
<item><a>19</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>18</a><a>ponct</a><a>18</a><a>ponct</a></item>
<item><a>20</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>18</a><a>ponct</a><a>18</a><a>ponct</a></item>
</p>
</description>

节点项是具有 POS、依赖项等的令牌...我只想保留 a[8] = 'obj' 的节点项,并且我想按 a[4] 升序对我的项目进行排序。这是我的一段代码,但它不起作用。这些项目仅包含具有 a[8]='obj' 的元素,但排序不起作用。我想将 a[2] 和 a[4] 连接起来以得到他的词性(词性)这个词你是怎么做到的?如何保持从模板中排序的节点?所以我的项目必须按 a[4](POS)分组,在 a[8](依赖项)中包含 obj,并按 a[4] 升序排序。谢谢。我的输出必须是这样的:

de  DET  
garcon NC    
qui PRONREL  
marcher V  

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8"/>    
    
<xsl:template match="/">
    
    <xsl:apply-templates select="//titre"/>
     
</xsl:template>      
    <xsl:template match="titre">
        
        <xsl:for-each-group select="p//item[a[8]='obj']" group-by="a[4]">
            <xsl:for-each select="current-group()">
                <xsl:value-of select="concat(a[2], ' ', a[4])"/>
                <xsl:text disable-output-escaping='yes'>&#xD;&#xA;</xsl:text>
            </xsl:for-each>
        </xsl:for-each-group>
        
    </xsl:template>

    
<xsl:template match="description">
    
</xsl:template>
    
</xsl:stylesheet>

我有这个输出:

que PROREL  
faire VINF   
année NC   
pays NC   
l' CLO   
à P   
revenu NC  
vœux NC   
retenir VINF  
An NPP  
ans NC   
amuser VINF  
relance NC  
soutien NC  
objet NC   
identité NC  
débat NC   
être  VINF     
NC artiste  
cours NC     
hausse NC     
zone NC    

标签: xmlxsltxpathnlp

解决方案


两者都for-each允许for-each-group您通过使用来应用排序,xsl:sort因此如果您想对组进行排序,请使用例如

<xsl:for-each-group select="//p[@type='titre']//item[a[8]='obj']" group-by="a[4]">
  <xsl:sort select="current-grouping-key()"/>

如果要输出每个组中的项目,请使用例如

<xsl:for-each select="current-group()">
  <xsl:sort select="a[2]"/>

推荐阅读