2016-05-21 3 views
0

Ich habe eine for-each-Schleife, wo ich eine innere if-Anweisung hinzugefügt habe, um über meine Anwendung zu filtern. Die verknüpfte Anwendung wird nicht direkt in den Knoten referenziert, die ich überschlinge.XSLT for-jeder mit inneren if-Anweisung hat keinen Einfluss auf die Position beginnend mit 1, es beginnt mit 5

Es ist eher formularfield -> formular -> Anwendung und die XML-Struktur ist flach, nicht hierarchisch.

Wenn ich mit einem solchen Filter if-Anweisung, werde ich eine Position bei 5 beginnen bekommen und nicht 1:

<xsl:for-each select="//lbDMF/formularfields/formular[@tablename=$FKTable]"> 
<xsl:variable name="DisplayField1" select="@fkname"/> 
<xsl:variable name="FKFormularRefId" select="@formularid"/> 
<xsl:if test="//lbDMF/formulare/formular[@ID=$FKFormularRefId][@applicationid=$ApplicationID]/@applicationid=$ApplicationID"> 
Foo.VisibleIndex = <xsl:value-of select="position()-1"/>; 

Meine Frage lautet wie folgt: Kann ich die innere bewegen, wenn die Bedingung in der for-each wählen?

Wenn, wie könnte ich das tun (ich versuchte und fehlgeschlagen)?

Wenn es eine andere Art zu filtern gibt, würde ich die Position beeinflussen?

Ich benutze libxslt aus meiner C++ - Anwendung und keine Java-basierten xslt-Prozessor.

Danke,

Lothar

+2

Vielleicht möchten Sie schreiben eine kleine, aber repräsentative Stichprobe der XML-Eingabe uns und erklären, welche Bedingung Sie überprüfen möchten, und die gewünschte Ergebnis zu erzielen, verwenden können. Zeigen Sie uns auch Ihren Versuch und erklären Sie, auf welche Art und Weise er fehlgeschlagen ist (z. B. Syntaxfehler, semantischer Fehler). –

Antwort

0

Im Allgemeinen mit Querverweisen Sie arbeitet mit den Tasten können und

<xsl:key name="table-name" match="lbDMF/formularfields/formular" use="@tablename"/> 

auf diese Weise der Ausdruck //lbDMF/formularfields/formular[@tablename=$FKTable]-key('table-name', $FKTable) verkürzt aufgebaut werden kann.

Dann können Sie einen zweiten Schlüssel

<xsl:key name="id" match="lbDMF/formulare/formular" use="@ID"/> 

und jetzt können Sie //lbDMF/formulare/formular[@ID=$FKFormularRefId] als key('id', $FKFormularRefId) einrichten schreiben.

Ich bin mir nicht sicher, warum Sie @applicationid=$ApplicationID sowohl in einem Prädikat Ausdruck und im letzten Schritt haben, das scheint überflüssig.

Also die Tasten ich glaube, Sie

<xsl:for-each select="key('table-name', $FKTable)[key('id', @formularid)/@applicationid=$ApplicationID]"> 
    Foo.VisibleIndex = <xsl:value-of select="position()-1"/>; 
</xsl:for-each> 
Verwandte Themen