2016-06-09 54 views
1

我正在處理基本上是字典的文件。我想要做的是僅選擇具有特定「域」的文章,並以不同的方式重新組織它們。 我的問題是,一切似乎工作正常,除了我得到了數以百計的文章一遍又一遍的相同的文章,我不知道爲什麼! 你能幫我解決這個謎團嗎?如何防止循環的xsl轉換?

這裏是我的XSL:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="html" indent="yes" encoding="UTF-8"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="article"> 
      <xsl:for-each select="//label"> 
       <xsl:if test="./@type ='domain'"> 
      <xsl:element name="article"> 
       <xsl:element name="domaine"> 
        <xsl:value-of select="./@value"/> 
       </xsl:element> 
       <xsl:element name="div"> 
        <xsl:element name="h2"> 
        <xsl:value-of select="ancestor::article/title"/> 
        </xsl:element> 
        <xsl:for-each select="ancestor::pos/descendant::pron"> 
        <xsl:element name="p"> 
         <xsl:value-of select="."/> 
        </xsl:element> 
        </xsl:for-each> 
        <xsl:for-each select="ancestor::pos//inflection"> 
         <xsl:element name="p"> 
          <xsl:text>Flexion : </xsl:text> 
          <xsl:value-of select="@form"/> 
          <xsl:text>; Prononciation : </xsl:text> 
          <xsl:value-of select="@prons"/> 
         </xsl:element> 
        </xsl:for-each> 
       </xsl:element> 
       <xsl:element name="div"> 
        <xsl:element name="p"> 
        <xsl:text>Définition : </xsl:text> 
      <xsl:value-of select="ancestor::definition/gloss/txt"/> 
         <xsl:for-each select="ancestor::pos//example/txt"> 
         <xsl:text> 
          Exemple : </xsl:text> 
          <xsl:value-of select="."/> 
         </xsl:for-each> 
        </xsl:element> 
       </xsl:element> 
      </xsl:element> 
       </xsl:if> 
     </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

這裏是我的輸入基本上看起來像(它只是一個不同的文章的順序):

<?xml-stylesheet type="text/xsl" href="sajous.xslt"?> 
<split> 
    <article> 
    <title>aiguchi</title> 
    <pageId>471440</pageId> 
    <meta> 
     <category>u prononcés /u/ en français</category> 
     <category>ch prononcés /tʃ/ en français</category> 
    </meta> 
    <text> 
     <etymology> 
     <etym> 
      <xml>du japonais <foreignWord lang="ja" translit="aïguchi">合口</foreignWord>.</xml> 
      <txt>du japonais 合口 aïguchi.</txt> 
     </etym> 
     </etymology> 
     <pos type="nom" lemma="1" locution="0" gender="m" number="s"> 
     <pronunciations> 
      <pron>aj.gu.tʃi</pron> 
     </pronunciations> 
     <paradigm> 
      <inflection form="aiguchi" gracePOS="Ncms" prons="aj.gu.tʃi"/> 
     </paradigm> 
     <definitions> 
      <definition> 
      <gloss> 
       <xml>Monture pour une lame de <innerLink ref="tanto">tanto</innerLink> plus épurée que la monture standard buke-zukuri, où le couteau n'a pas de garde et où le <innerLink ref="sageo">sageo</innerLink> est inexistant dans la majorité des cas.</xml> 
       <txt>Monture pour une lame de tanto plus épurée que la monture standard buke-zukuri, où le couteau n'a pas de garde et où le sageo est inexistant dans la majorité des cas.</txt> 
      </gloss> 
      </definition> 
      <definition> 
      <gloss> 
       <labels> 
       <label type="sem" value="métonymie"/> 
       <label type="domain" value="armes blanches"/> 
       </labels> 
       <xml><innerLink ref="tanto#fr">Tanto</innerLink> monté en aïguchi.</xml> 
       <txt>Tanto monté en aïguchi.</txt> 
      </gloss> 
      </definition> 
     </definitions> 
     <subsection type="alternativeForm"> 
      <item>aikuchi</item> 
     </subsection> 
     </pos> 
    </text> 
    </article> 
</split> 

回答

1

當你匹配的文章:

<xsl:template match="article"> 

然後您循環整個整個文檔的標籤ument,即標籤所有文章:

<xsl:for-each select="//label"> 

,但你只想要匹配的文章的標籤。因此寫

<xsl:for-each select=".//label"> 
+0

太棒了,我知道我錯過了一些明顯的東西,但看不到什麼。謝謝! – Azaghal