2010-08-31 5 views
0

Je suis en train de transformer mon fichier xml:accéder à la valeur de l'attribut (comme une variable)

<root> 
    <group id="F_123" > 
     <term id="F_123_d" > 
      <word>blabla</word> 
      <instruction>blabla</instruction> 
     </term> 
     <term id="F_123"> 
      <word>blabla</word> 
      <instruction>blabla</instruction> 
      <numbers> 
       <number code="01" >1</number> 
       <number code="02" >2</number> 
       <number code="03" >3</number> 
       <number code="04" >4</number> 
       <number code="05" >5</number> 
      </numbers> 
     </term> 
     <term id="F_124"> 
      <word>blabla</word> 
      <numbers> 
       <number code="01" >1</number> 
       <number code="02" >2</number> 
       <number code="03" >3</number> 
       <number code="04" >4</number> 
       <number code="05" >5</number> 
      </numbers> 
     </term> 
     <term id="F_125"> 
      <word>blabla</word> 
      <numbers> 
       <number code="01" >1</number> 
       <number code="02" >2</number> 
       <number code="03" >3</number> 
       <number code="04" >4</number> 
       <number code="05" >5</number> 
      </numbers> 
     </term> 
     <routing id="F_123_1"> 
      <condition> 
       <operator type="or"> 
        <operator type="or"> 
         <operator type="equal"> 
          <variable name="F_D01a3DE1"/> 
          <constant>DK</constant> 
         </operator> 
         <operator type="equal"> 
          <variable name="F_D01a3DE1"/> 
          <constant>RF</constant> 
         </operator> 
        </operator> 
        <operator type="equal"> 
         <variable name="F_D01a3DE1"/> 
         <constant>1</constant> 
        </operator> 
       </operator> 
      </condition> 
      <then> 
       <goto group="A_24"/> 
      </then> 
      <else> 
       <routing> 
        <condition> 
         <operator type="or"> 
          <operator type="or"> 
           <operator type="equal"> 
            <variable name="B_D01a3DE1"/> 
            <constant>5</constant> 
           </operator> 
           <operator type="equal"> 
            <variable name="B_D01a3DE1"/> 
            <constant>10</constant> 
           </operator> 
          </operator> 
          <operator type="equal"> 
           <variable name="B_D01a3DE1"/> 
           <constant>7</constant> 
          </operator> 
         </operator> 
        </condition> 
        <then> 
         <goto group="A_25"/> 
        </then> 
        <else> 
         <routing> 
          <condition> 
           <operator type="or"> 
            <operator type="equal"> 
             <variable name="B_D01a3DE1"/> 
             <constant>6</constant> 
            </operator> 
            <operator type="equal"> 
             <variable name="B_D01a3DE1"/> 
             <constant>11</constant> 
            </operator> 
           </operator> 
          </condition> 
          <then> 
           <goto group="A_26"/> 
          </then> 
          <else> 
           <goto group="A_27"/> 
          </else> 
         </routing> 
        </else> 
       </routing> 
      </else> 
     </routing> 
    </group> 
    <group id="A_25" > 
     <term id="A_25" > 
      <word>blabla</word> 
      <instruction>blabla</instruction> 
     </term> 
     <term id="A_26"> 
      <word>blabla</word> 
      <instruction>blabla</instruction> 
      <numbers> 
       <number code="01" >1</number> 
       <number code="02" >2</number> 
      </numbers> 
     </term> 
    </group> 
</root> 

Je veux accéder à la valeur du groupe @/term/id @ et faire un élément pour chaque terme en <group id="A_25">. C'est possible?

+0

A échantillon représentatif aurait été suffisant, même si on ne sait pas ce que le vous donne envie. Pouvez-vous poster un échantillon de la sortie dont vous avez besoin? – Oded

+0

Si cette expression était supposée être XPath, c'est faux, @ signifie des attributs dans XPath, l'expression correcte serait 'group/term/@ id'. – svick

+1

Vous n'avez pas défini exactement quelle sortie doit être produite et comment la sortie est liée au document XML fourni. S'il vous plaît, définissez-les, ne forcez pas eceryone pour essayer de deviner ce que vous voulez vraiment. !!! –

Répondre

2

Il est pas très clair ce que vous voulez exactement, donc une supposition suivante:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="group/term/@id"> 
    <id> 
     <xsl:value-of select="."/> 
    </id> 
    </xsl:template> 

    <xsl:template match="/"> 
    <root> 
     <xsl:apply-templates select="node()" /> 
    </root> 
    </xsl:template> 

    <xsl:template match="node()|@*"> 
    <xsl:apply-templates select="node()|@*" /> 
    </xsl:template> 
</xsl:stylesheet> 

Appliqué à votre exemple (je devais ajouter un élément de racine, de sorte qu'il est valide), il produit :

<root> 
    <id>F_123_d</id> 
    <id>F_123</id> 
    <id>F_124</id> 
    <id>F_125</id> 
    <id>A_25</id> 
    <id>A_26</id> 
</root> 
+1

Il n'y a pas besoin d'un modèle pour commencer avec l'opérateur '//'. –

+0

Merci, j'ai résolu cela. – svick

1

Je veux accéder à la valeur de @ groupe/term/id @ et faire un élément par chaque terme <group id="A_25">. Est-ce que est-il possible?

Cette expression XPath sélectionner ce que je pense que vous voulez:

/root/group[@id='A_25']/term/@id 

En outre, ce processus stylesheet ce que je pense que vous voulez:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="text()"/> 
    <xsl:template match="group[@id='A_25']/term"> 
     <element id="{@id}"/> 
    </xsl:template> 
</xsl:stylesheet> 

Sortie:

<element id="A_25" /> 
<element id="A_26" /> 
Questions connexes