2016-06-09 2 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"> 

вы затем обводите этикетки целиком doc ument, то есть метки все статьи:

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

но вы хотите только метки согласованной статьи. Поэтому напишите

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

Отлично, я знал, что мне не хватает чего-то очевидного, но не мог понять, что. Благодаря! – Azaghal

Смежные вопросы