2016-07-01 22 views
-1

Ich habe eine globale Variable name="cats" as="element()*. Die Daten, die ich zum Erstellen der Variablen und der Daten verwendet habe, die ich transformieren möchte, befinden sich in verschiedenen Teilen des Baums des Dokuments. Die Variable enthält die Elemente CellA, CellF und CellC (eingeschlossen in <Item> Tags)xslt Finden der Position eines bestimmten Elements in einer Variablen

Mein Ziel ist es, die folgende vordefinierte Struktur mit Daten aus einer Tabelle zu füllen, die so viele Zellen <field> pro <line> als die Variable enthält (und in der gleichen Reihenfolge).

<row> 
    <CellA> </CellA> 
    <CellB> </CellB> 
    <CellC> </CellC> 
    <CellD> </CellD> 
    <CellE> </CellE> 
    <CellF> </CellF> 
</row> 

Meine Idee ist es für jeden <Cell_> zu überprüfen, ob der Name in der Variable existiert und verwenden Sie seine Position, um die ursprünglichen Daten zuzugreifen.
Leider kann ich position() nicht verwenden, während $cats durchschleifen, weil ich <field> hier nicht zugreifen kann.

Eine andere Methode, die anderswo vorgeschlagen wurde, wäre die Anzahl der Vorgänger-Geschwister zu zählen, wo $cats = Cell_. Der Vorschlag basierte jedoch nicht auf Variablen. Und da ich Novize war, konnte ich nicht herausfinden, wie ich das machen sollte.
Ist es möglich, dies auf diese Weise zu tun? Gibt es einen anderen Weg, es zu tun?

Wenn etwas nicht klar ist, lass es mich wissen.

Zusätzliche Informationen

sourceXML

<body> 
    <line> 
     <field>data</field> 
     <field/> 
     <field/> 
    </line> 
    <line/> 
    ... 
</body> 

targetXML (siehe oben)

XSLT

<xsl:variable name="cats" as="element()*"> 
    <Item>CellA</Item> 
    <Item>CellF</Item> 
    <Item>CellC</Item> 
</xsl:variable> 
<xsl:for-each select="body/line"> 
    <row> 
     <CellA> 
      *What to do here to fill it with data from source xml* 
      <xsl:variable name="pos" select="???"/> 
      <xsl:value-of select="field[$pos]"/> 
     </CellA> 
     <CellB> 
     </CellB> 
     ... 
    </row> 
+1

Könnten Sie bitte [mcve] posten? Ich glaube, Sie sollten die 'index-of()' -Funktion verwenden, aber es ist schwer zu sagen, wie genau. –

+0

Ich würde ein Beispiel geben, wenn Sie das Problem nicht bereits gelöst hätten. Vielen Dank. Ich wusste nichts über index-of(), aber es funktioniert wie beabsichtigt. (Möchten Sie es als eine Antwort für mich zu wählen, um zu wählen?) –

+1

Ich tat, aber ohne Kontext wird es niemandem helfen, dies zu lesen. –

Antwort

0

Meine Idee ist es, für jede <Cell_> zu prüfen, ob der Name in der Variable existiert und seine Position verwendet, um auf die Originaldaten zuzugreifen.

Anscheinend möchten Sie die index-of() Funktion verwenden.

Verwandte Themen