XSLT: Wie bekomme index der position bestimmter nodes in alle childs kombiniert
Betrachten Sie das folgende XML:
<root>
<a>
<pos>
<c val="abc"></c>
<c val="def"></c>
<c val="ghi"></c>
<c val="jkl"></c>
<c val="mno"></c>
</pos>
<b>
<c></c>
</b>
<b>
<c></c>
<d>here</d>
</b>
<b>
<e>and</e>
<c></c>
<d>for</d>
</b>
<b>
<c></c>
<c></c>
<d>also</d>
</b>
</a>
<a>
<pos>
<c val="pqr"></c>
<c val="stu"></c>
<c val="vwx"></c>
<c val="yz"></c>
</pos>
<b>
<c></c>
<d>what</d>
</b>
<b>
<c></c>
</b>
<b>
<d>how</d>
</b>
<b>
<c></c>
<d>where</d>
<c></c>
</b>
</a>
</root>
Nun in meine Ausgabe, wenn ich auch eine <c></c>
innerhalb einer b
ich benötigen, um den entsprechenden Wert des val
Attribut eines <c></c>
von der <pos></pos>
Knoten. Vom entsprechenden Wert, den ich meine, der index der Knoten c
innen pos
sollte der gleiche sein wie der index der c
in allen b
Knoten kombiniert.
Die gewünschte Ausgabe:
<start>
<level>
abc
</level>
<level>
def
here
</level>
<level>
and
ghi
for
</level>
<level>
jkl
mno
also
</level>
<start>
<start>
<level>
pqr
what
</level>
<level>
stu
</level>
<level>
how
</level>
<level>
vwx
where
yz
</level>
</start>
Versuchte ich es mit der folgenden XSL:
<xsl:template match="root">
<star>
<xsl:apply-templates select="a"/>
</start>
</xsl:template>
<xsl:template match="a">
<xsl:apply-templates select="b"/>
</xsl:template>
<xsl:template match="b">
<level>
<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="name() = 'd'">
<xsl:value-of select="."/>
</xsl:when>
<xsl:when test="name() = 'e'">
<xsl:value-of select="."/>
</xsl:when>
<xsl:when test="name() = 'c'">
<xsl:variable name="posCount">
<!-- I don't know what to do here -->
</xsl:valiable>
<xsl:for-each select="ancestor::a[1]/pos">
<xsl:for-each select="c[position() = $posCount]">
<xsl:value-of select="@val"/>
</xsl:for-each>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</level>
</xsl:template>
Was ich tun muss, ist irgendwie die position, die Anzahl der einzelnen c
im inneren alle b
s kombiniert und dann den Wert von val
Attribut entsprechend positioniert c
von innen pos
.
Wie kann ich Vorgehen, um es zu tun?
Hinweis: ich bin mit XSLT 1.0
Thnx im vorraus!!!!!
InformationsquelleAutor Surender Thakran | 2014-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die index-Nummer, die Sie suchen, können erreicht werden ganz einfach mit Hilfe des
xsl:number
element. Zum Beispiel:Hinweise:
1. Ich habe eine
root
element, um die Ausgabe zu machen, eine gültige XML;2. Es wäre am besten eine Schlüssel zu bekommen, wird der entsprechende Wert aus
pos/c
.xsl:number
sollte ich nicht schreibenfrom="ancestor::a[1]"
statt?Nein, warum? Ist es nicht so, wie ich es schrieb?
Ja, es hat perfekt funktioniert. Ich habe nur versucht zu verstehen, wie es funktionierte? Hat die
from
Attribut implizit leitet sich der erste Vorfahra
?Lesen Sie mehr über es hier: w3.org/TR/xslt#number
InformationsquelleAutor michael.hor257k
Ich denke, dies zu tun:
count(preceding-sibling::c)
richtig ist,count(preceding::b/c)
wird mir Anzahl derb/c
- pair-Mädchen in der ganzen xml-anstatt im aktuellena
Knoten. Es können mehrerea
Knoten in derroot
aber ich will position index einc
nur in seiner aktuellena
Knoten.InformationsquelleAutor Lingamurthy CS