2017-10-30 3 views
0

안녕하세요. 먼저 도와 주셔서 감사합니다.XSLT 템플릿 우선 순위 문제

xslt 우선 순위 처리에 문제가 있습니다. 여기 여기 내 XML 소스도 파일이

<?xml version="1.0" encoding="UTF-8"?> 
 
<Publication xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="F10505" type="Fiche d'information" xsi:noNamespaceSchemaLocation="../Schemas/3.0/Publication.xsd"> 
 
    <dc:title>Choix du nom de famille d'un enfant : nom de la mère, du père ou double-nom</dc:title> 
 
    <dc:creator>Direction de l'information légale et administrative</dc:creator> 
 
    <dc:subject>Papiers - Citoyenneté</dc:subject> 
 
    <dc:description>Les parents peuvent choisir, sous certaines conditions, le nom que portera leur enfant. Une déclaration conjointe de choix de nom peut être faite avant ou après la déclaration de naissance. À défaut de choix, l’enfant porte le nom du parent dont la filiation est établie en premier ou celui du père en cas d’établissement simultané de la filiation.</dc:description> 
 
    <dc:publisher>Direction de l'information légale et administrative</dc:publisher> 
 
    <dc:contributor>Direction de l'information légale et administrative (Premier ministre), Ministère chargé de la justice</dc:contributor> 
 
    <dc:date>modified 2017-03-21</dc:date> 
 
    <dc:type>Fiche pratique</dc:type> 
 
    <dc:format>text/xml</dc:format> 
 
    <dc:identifier>F10505</dc:identifier> 
 
    <dc:source>http://www.legifrance.gouv.fr/affichCode.do?idArticle=LEGIARTI000006424851&amp;idSectionTA=LEGISCTA000006150015&amp;cidTexte=LEGITEXT000006070721, http://circulaires.legifrance.gouv.fr/pdf/2011/11/cir_34124.pdf</dc:source> 
 
    <dc:language>Fr</dc:language> 
 
    <dc:relation>isPartOf N151</dc:relation> 
 
    <dc:coverage>France entière</dc:coverage> 
 
    <dc:rights>https://www.service-public.fr/a-propos/mentions-legales</dc:rights> 
 
    <SurTitre>Fiche pratique</SurTitre> 
 
    <Audience>Particuliers</Audience> 
 
    <Canal>www.service-public.fr</Canal> 
 
    <FilDAriane> 
 
    <Niveau ID="Particuliers">Accueil particuliers</Niveau> 
 
    <Niveau ID="N19810">Papiers - Citoyenneté</Niveau> 
 
    <Niveau ID="N151">Nom et prénom</Niveau> 
 
    <Niveau ID="F10505" type="Fiche d'information">Choix du nom de famille d'un enfant : nom de la mère, du père ou double-nom</Niveau> 
 
    </FilDAriane> 
 
    <Theme ID="N19810"> 
 
    <Titre>Papiers - Citoyenneté</Titre> 
 
    </Theme> 
 
    <SousThemePere ID="N103">État civil - Identité - Authentification</SousThemePere> 
 
    <DossierPere ID="N151"> 
 
    <Titre>Nom et prénom</Titre> 
 
    <SousDossier ID="N151-1"> 
 
     <Titre>Nom de famille</Titre> 
 
     <Fiche ID="F10505">Choix du nom de l'enfant à sa naissance : mère, père ou double-nom</Fiche> 
 
     <Fiche ID="F10506">Changement du nom de l'enfant après sa naissance</Fiche> 
 
     <Fiche ID="F1656">Changement de nom pour motif légitime</Fiche> 
 
    </SousDossier> 
 
    <SousDossier ID="N151-2"> 
 
     <Titre>Prénom</Titre> 
 
     <Fiche ID="F882">Choix du prénom de l'enfant</Fiche> 
 
     <Fiche ID="F885">Changement de prénom</Fiche> 
 
    </SousDossier> 
 
    <SousDossier ID="N151-3"> 
 
     <Titre>Nom d'usage</Titre> 
 
     <Fiche ID="F868">Utilisation du nom de son mari ou de sa femme</Fiche> 
 
     <Fiche ID="F1343">Utilisation du nom des deux parents</Fiche> 
 
    </SousDossier> 
 
    <SousDossier ID="N151-4"> 
 
     <Titre>Adoption</Titre> 
 
     <Fiche ID="F2668">Nom de famille et adoption plénière</Fiche> 
 
     <Fiche ID="F2621">Nom de famille et adoption simple</Fiche> 
 
    </SousDossier> 
 
    </DossierPere> 
 
    <SousDossierPere>Nom de famille</SousDossierPere> 
 
    <Introduction> 
 
    <Texte> 
 
     <Paragraphe>Les parents peuvent choisir, sous certaines conditions, le nom que portera leur enfant. \t \t \t Une déclaration conjointe de choix de nom peut être faite avant ou après la déclaration de naissance. \t \t \t À défaut de choix, l’enfant porte le nom du parent dont la filiation est établie en premier ou celui du père en cas d’établissement simultané de la filiation.</Paragraphe> 
 
    </Texte> 
 
    </Introduction> 
 
    <Texte> 
 
    <Chapitre> 
 
     <Titre> 
 
     <Paragraphe>Quel nom peut-on donner à son enfant ?</Paragraphe> 
 
     </Titre> 
 
     <BlocCas affichage="onglet"> 
 
     <Cas> 
 
      <Titre> 
 
      <Paragraphe>Cas général</Paragraphe> 
 
      </Titre> 
 
      <Paragraphe>Un enfant dont la filiation est établie à l'égard de chacun des parents, peut porter : </Paragraphe> 
 
      <Liste type="puce"> 
 
      <Item> 
 
       <Paragraphe>soit le nom du père ;</Paragraphe> 
 
      </Item> 
 
      <Item> 
 
       <Paragraphe>soit le nom de la mère ;</Paragraphe> 
 
      </Item> 
 
      <Item> 
 
       <Paragraphe>soit les 2 noms accolés, séparés par un simple espace, dans un ordre choisi par eux et dans la limite d'un seul <LienIntra LienID="R10114" type="Définition de glossaire">nom de famille</LienIntra> pour chacun s'ils portent eux-mêmes le nom de leurs 2 parents.</Paragraphe> 
 
      </Item> 
 
      </Liste> 
 
      <Paragraphe>Exemple : si le nom du père est Dupond Durand et la mère Dupuis, l'enfant pourra porter le nom de Dupond Dupuis.</Paragraphe> 
 
      <ANoter> 
 
      <Titre>À noter</Titre> 
 
      <Paragraphe>un nom composé existant avant 2005 constitue un nom unique, qui est indissociable et est donc transmis intégralement. Un nom composé suite à une <LienInterne LienPublication="F2621" type="Fiche d'information" audience="Particuliers">adoption simple</LienInterne>, quel que soit l'âge de l'adopté, est également indissociable et transmis intégralement.</Paragraphe> 
 
      </ANoter> 
 
     </Cas> 
 
     <Cas> 
 
      <Titre> 
 
      <Paragraphe>L'un des parents est étranger</Paragraphe> 
 
      </Titre> 
 
      <Paragraphe>Un enfant dont la filiation est établie à l'égard de chacun des parents, peut porter : </Paragraphe> 
 
      <Liste type="puce"> 
 
      <Item> 
 
       <Paragraphe>soit le nom du père ;</Paragraphe> 
 
      </Item> 
 
      <Item> 
 
       <Paragraphe>soit le nom de la mère ;</Paragraphe> 
 
      </Item> 
 
      <Item> 
 
       <Paragraphe>soit les 2 noms accolés, séparés par un simple espace, dans un ordre choisi par eux et dans la limite d'un seul <LienIntra LienID="R10114" type="Définition de glossaire">nom de famille</LienIntra> pour chacun s'ils portent eux-mêmes le nom de leurs 2 parents</Paragraphe> 
 
      </Item> 
 
      </Liste> 
 
      <Attention> 
 
      <Titre>Attention</Titre> 
 
      <Paragraphe>si le nom du ou des parents étrangers est constitué de plusieurs termes, il est considéré comme indivisible. Pour diviser le nom et n'en transmettre qu'une partie, vous devez produire un certificat de coutume.</Paragraphe> 
 
      </Attention> 
 
     </Cas> 
 
     </BlocCas> 
 
    </Chapitre> 
 
    <Chapitre> 
 
     <Titre> 
 
     <Paragraphe>Comment choisir le nom de l'enfant ?</Paragraphe> 
 
     </Titre> 
 
     <Paragraphe>Le choix du nom de famille s'effectue par le formulaire cerfa n°15286*01. \t Il s'agit d’un seul document signé à la même date par les père et mère, remis à l'officier de l'état civil avec la <LienInterne LienPublication="F961" type="Fiche d'information" audience="Particuliers">déclaration de naissance</LienInterne>. </Paragraphe> 
 
     <ServiceEnLigne ID="R32739" URL="https://www.formulaires.modernisation.gouv.fr/gf/cerfa_15286.do" format="application/pdf" poids="197.1 KB" numerocerfa="15286*01" type="Formulaire"> 
 
     <Titre>Déclaration conjointe de choix de nom</Titre> 
 
     <Source ID="R30663">Ministère chargé de la justice</Source> 
 
     <Introduction> 
 
      <Texte> 
 
      <Paragraphe>Permet aux parents de déclarer le nom de famille choisi pour leur enfant.</Paragraphe> 
 
      </Texte> 
 
     </Introduction> 
 
     </ServiceEnLigne> 
 
     <Paragraphe>Si le couple a déjà un enfant né avant 2005, le choix de nom est possible pour le plus jeune, sous certaines conditions, seulement si l'aîné des enfants n'a pas fait l'objet d'une déclaration d'ajout de nom ou de déclaration conjointe de changement de nom.</Paragraphe> 
 
     <Paragraphe>Si le couple a déjà un enfant né après le 1<Exposant>er</Exposant> janvier 2005, le choix de nom est possible pour le plus jeune :</Paragraphe> 
 
     <Liste type="puce"> 
 
     <Item> 
 
      <Paragraphe>si la filiation de l'aîné ne permettait pas une déclaration de choix de nom ;</Paragraphe> 
 
     </Item> 
 
     <Item> 
 
      <Paragraphe>et qu'aucune déclaration de changement de nom n'a été faite ultérieurement.</Paragraphe> 
 
     </Item> 
 
     </Liste> 
 
    </Chapitre> 
 
    <Chapitre> 
 
     <Titre> 
 
     <Paragraphe>Quel nom en l'absence de choix des parents ?</Paragraphe> 
 
     </Titre> 
 
     <BlocCas affichage="radio"> 
 
     <Cas> 
 
      <Titre> 
 
      <Paragraphe>Les parents sont mariés ensemble</Paragraphe> 
 
      </Titre> 
 
      <Paragraphe>En l'absence de déclaration conjointe de choix de nom, l'enfant prend \t \t \t le nom du père.</Paragraphe> 
 
      <Paragraphe>L'absence de choix équivaut à un choix et s'impose aux autres enfants.</Paragraphe> 
 
     </Cas> 
 
     <Cas> 
 
      <Titre> 
 
      <Paragraphe>Les parents ne sont pas mariés ensemble</Paragraphe> 
 
      </Titre> 
 
      <Paragraphe>En l'absence de déclaration conjointe de choix de nom, l'enfant prend le nom de celui de ses parents à l'égard duquel sa filiation est établie en premier.</Paragraphe> 
 
      <Paragraphe>Par exemple, si le père reconnaît l'enfant après la déclaration de naissance, l'enfant prend le nom de sa mère.</Paragraphe> 
 
      <Paragraphe>Si la filiation est établie simultanément entre les deux parents, l'enfant prend le nom du père.</Paragraphe> 
 
      <Paragraphe>L'absence de choix équivaut à un choix et s'impose aux autres enfants.</Paragraphe> 
 
      <ANoter> 
 
      <Titre>À noter</Titre> 
 
      <Paragraphe>en cas de <LienInterne LienPublication="F10555" type="Fiche Question-réponse" audience="Particuliers">désaccord entre les parents</LienInterne>, l'enfant prend le nom des deux parents accolés selon l'ordre alphabétique.</Paragraphe> 
 
      </ANoter> 
 
     </Cas> 
 
     </BlocCas> 
 
    </Chapitre> 
 
    <Chapitre> 
 
     <Titre> 
 
     <Paragraphe>Quels sont les effets du choix du nom ?</Paragraphe> 
 
     </Titre> 
 
     <Paragraphe>Le choix effectué pour l'aîné s'impose aux enfants plus jeunes du couple. Pour cela, leur filiation doit avoir été établie à l'égard des deux parents à la date de la déclaration de naissance.</Paragraphe> 
 
     <Paragraphe>Le choix du nom est définitif.</Paragraphe> 
 
    </Chapitre> 
 
    </Texte> 
 
    <VoirAussi important="non"> 
 
    <Fiche ID="F2668" audience="Particuliers"> 
 
     <Titre>Adoption plénière : conséquence sur le nom de famille</Titre> 
 
     <Theme ID="N19810"> 
 
     <Titre>Papiers - Citoyenneté</Titre> 
 
     </Theme> 
 
    </Fiche> 
 
    <Fiche ID="F2621" audience="Particuliers"> 
 
     <Titre>Adoption simple : conséquence sur le nom de famille</Titre> 
 
     <Theme ID="N19810"> 
 
     <Titre>Papiers - Citoyenneté</Titre> 
 
     </Theme> 
 
    </Fiche> 
 
    </VoirAussi> 
 
    <OuSAdresser ID="R1" type="Local personnalisé sur SP"> 
 
    <Titre>Mairie</Titre> 
 
    <Complement>Pour établir la déclaration de choix de nom</Complement> 
 
    <PivotLocal>mairie</PivotLocal> 
 
    <RessourceWeb URL="https://lannuaire.service-public.fr/"/> 
 
    <Source ID="R30601">Service-public.fr</Source> 
 
    </OuSAdresser> 
 
    <Reference type="Texte de référence" URL="http://www.legifrance.gouv.fr/affichCode.do?idArticle=LEGIARTI000006424851&amp;idSectionTA=LEGISCTA000006150015&amp;cidTexte=LEGITEXT000006070721" ID="R12161"> 
 
    <Titre>Code civil : article 311-21 à 311-24</Titre> 
 
    <Complement>Choix du nom de famille pour un enfant</Complement> 
 
    </Reference> 
 
    <Reference type="Texte de référence" URL="http://circulaires.legifrance.gouv.fr/pdf/2011/11/cir_34124.pdf" ID="R2316" format="application/pdf" poids="1.0 MB"> 
 
    <Titre>Circulaire du 28 octobre 2011 portant sur divers actes de l'état civil relatifs à la naissance et à la filiation</Titre> 
 
    </Reference> 
 
    <ServiceEnLigne ID="R32739" URL="https://www.formulaires.modernisation.gouv.fr/gf/cerfa_15286.do" format="application/pdf" poids="197.1 KB" numerocerfa="15286*01" type="Formulaire"> 
 
    <Titre>Déclaration conjointe de choix de nom</Titre> 
 
    <Source ID="R30663">Ministère chargé de la justice</Source> 
 
    </ServiceEnLigne> 
 
    <Definition ID="R10114"> 
 
    <Titre>Nom de famille</Titre> 
 
    <Texte> 
 
     <Paragraphe>Nom qui figure sur l'acte de naissance (appelé aussi <Expression>nom de naissance</Expression> ou <Expression>nom patronymique</Expression>)</Paragraphe> 
 
    </Texte> 
 
    </Definition> 
 
    <QuestionReponse ID="F10555" audience="Particuliers">Quel nom de famille pour un enfant en cas de désaccord entre les parents ?</QuestionReponse> 
 
</Publication>

이고 나의 XSL입니다

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
 
    <xsl:output method="html" encoding="iso-8859-1" indent="no"/> 
 
    <!-- Override built-in template --> 
 
    <xsl:template match="text() | @*"/> 
 
    <!-- --> 
 
    <xsl:template match ="/"> 
 
    <html> 
 
     <head> 
 
     <title> 
 
     </title> 
 
     <script src="/js/jquery-3.1.1.slim.min.js"> 
 
     </script> 
 
     <script src="/js/tether.min.js"> 
 
     </script> 
 
     <link href="/css/bootstrap.min.css" rel="stylesheet" type="text/css"/> 
 
     <script src="/js/bootstrap.min.js"> 
 
     </script> 
 
     <script src="/js/fonctions.js"> 
 
     </script> 
 
     </head> 
 
     <body> 
 
     <xsl:apply-templates/> 
 
     </body> 
 
    </html> 
 
    </xsl:template> 
 
    <!-- START-REGION: FilDAriane --> 
 
    <xsl:template match="FilDAriane"> 
 
    <div id="fildariane"> 
 
     <ol class="breadcrumb"> 
 
     <xsl:apply-templates/> 
 
     </ol> 
 
    </div> 
 
    </xsl:template> 
 
    <xsl:template match="FilDAriane/Niveau"> 
 
    <li class="breadcrumb-item"> 
 
     <xsl:value-of select="."/> 
 
    </li> 
 
    </xsl:template> 
 
    <!-- END-REGION: FilDAriane --> 
 
    <!-- START-REGION: Introduction --> 
 
    <xsl:template match="Introduction/Texte/Paragraphe"> 
 
    <div id="introduction"> 
 
     <xsl:value-of select="."/> 
 
    </div> 
 
    </xsl:template> 
 
    <!-- END-REGION: Introduction --> 
 
    <!-- START-REGION: Accordeon --> 
 
    <xsl:template match="Publication/Texte"> 
 
    <div id="accordion" role="tablist" aria-multiselectable="true"> 
 
     <xsl:apply-templates/> 
 
    </div> 
 
    </xsl:template> 
 
    <xsl:template match="Texte/Chapitre"> 
 
    <div class="card"> 
 
     <div class="card-header" role="tab" id="heading{generate-id()}"> 
 
     <h5 class="mb-0"> 
 
      <a data-toggle="collapse" data-parent="#accordion" href="#collapse{generate-id()}" aria-expanded="true" aria-controls="collapse{}"> 
 
      <div id="titre_elem_accordion"> 
 
       <xsl:value-of select="Titre/Paragraphe"/> 
 
      </div> 
 
      </a> 
 
     </h5> 
 
     </div> 
 
     <div id="collapse{generate-id()}" class="collapse show" role="tabpanel" aria-labelledby="heading{generate-id()}"> 
 
     <div class="card-body"> 
 
      <xsl:choose> 
 
      <xsl:when test="BlocCas and BlocCas/@affichage='onglet'"> 
 
       <ul class="nav nav-tabs"> 
 
       <xsl:apply-templates/> 
 
       </ul> 
 
       <div class="tab-content"> 
 
       <xsl:apply-templates/> 
 
       </div> 
 
      </xsl:when> 
 
      <xsl:when test="BlocCas and BlocCas/@affichage='radio'"> 
 
      </xsl:when> 
 
      <xsl:otherwise> 
 
      </xsl:otherwise> 
 
      </xsl:choose> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </xsl:template> 
 
    <xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/Cas/Titre"> 
 
    <xsl:variable name="counter"> 
 
     <xsl:number count="Cas"/> 
 
    </xsl:variable> 
 
    <xsl:choose> 
 
     <xsl:when test="$counter=1"> 
 
     <li class="active"> 
 
      <a data-toggle="tab" href="#menu{generate-id()}"> 
 
      <xsl:value-of select="Paragraphe"/> 
 
      </a> 
 
     </li> 
 
     </xsl:when> 
 
     <xsl:otherwise> 
 
     <li> 
 
      <a data-toggle="tab" href="#menu{generate-id()}"> 
 
      <xsl:value-of select="Paragraphe"/> 
 
      </a> 
 
     </li> 
 
     </xsl:otherwise> 
 
    </xsl:choose> 
 
    </xsl:template> 
 
    
 
    <xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/*"> 
 
    <div id="menu{generate-id()}" class="tab-pane fade in active"> 
 
     Test 
 
    </div> 
 
    </xsl:template> 
 

 

 
    <!-- END-REGION: Accordeon --> 
 
</xsl:stylesheet>

문제는 XSLT이 템플릿

를 사용하는 것입니다 대신 59,533,210

이 하나

<xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/Cas/Titre"> 

그리고 난 그냥 잘 적어도 특정 하나를 다른 작업을 삭제하면, 나는이 알아낼 수 없습니다, 나는 적어도 특정 이동, 우선 순위를 설정하려고했습니다 가장 구체적인 하나는 다른 파일에 저장하고 xsl : apply-imports를 사용하여 첫 번째 파일을 두 번째 반대쪽의 조정 매개 변수의 맨 위로 이동 시키지만 아무 것도 작동하지 않는 것 같습니다.

내가 이해할 수없는 것이 있습니까? 미리 감사드립니다.

답변

0

두 템플릿이 같은 요소와 일치하지 않기 때문에 템플릿 우선 순위에 실제로 문제가되지 않습니다. /Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/* 일치하는 템플릿은 부모 Cas 요소와 일치하지만, 다른 하나는 Title 아이 (* 일치에게 자식 노드, 모든 자손 노드)

문제는 자식 노드를 처리하는 코드를 가지고 있지 않는 첫 번째 템플릿이 일치 , 따라서 "Test"를 출력 한 다음 Cas의 자식 노드는 무시합니다.

당신은 (아마도) 다음은 Cas 요소에 대해이 작업을 수행하려면 다른 템플릿은, 어쩌면, 뭔가를

<xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/*"> 
    <div id="menu{generate-id()}" class="tab-pane fade in active"> 
    Test 
    <xsl:apply-templates /> 
    </div> 
</xsl:template> 

일치 또는 수 있도록 할 것 temlate, 내부 xsl:apply-templates를 사용하려면

..

<xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/*"> 
    <div id="menu{generate-id()}" class="tab-pane fade in active"> 
    Test 
    <xsl:if test="self::Cas"> 
     <xsl:apply-templates /> 
    </xsl:if> 
    </div> 
</xsl:template> 
+0

덕분에 내 문제를 해결했다. 깊은 노드 에 먼저 액세스하여 내 제목을 얻은 다음 에있는 모든 노드를 처리하여 탭 창을 채 웁니다. 그래서 내 디자인이 나쁘다고 생각하고 동시에 모든 노드를 처리하는 방법을 찾아야한다고 생각합니다. 동시에 생각합니다. 시간과 도움에 감사드립니다. – Folder

0

저를 도와 주신 Tim C에게 감사드립니다.

이 문제는 우선 순위가 아니지만 XSLT가 XML을 처리하는 방법에 대해 잘 이해하지 못했습니다.

나는 아직도 내가 문제가 무엇인가를 이해를 가지고, 힌트에 대한 코드를 다음

<xsl:template match="/Publication/Texte/Chapitre/BlocCas[@affichage='onglet']/Cas[not(Titre)]"> 
<div id="menu{generate-id()}" class="tab-pane fade in active"> 
    <xsl:apply-templates/> 
</div>